抓取並解析網頁資料(xml解析、html解析)
網頁有兩種格式,一種是xml另一種是html,目前似乎好像大部分都是html格式的,檢視網頁格式的方法是在瀏覽器中右鍵–>檢視原始碼或者直接F12即可。
一、XML解析
1)DOM解析
DOM(Document Object Mode)是將XML檔案的所有內容以文件樹的方式存在記憶體中,通過節點以及節點之間的關係來解析XML檔案。由於DOM操作會將整個XML檔案存放在記憶體中,所以消耗記憶體大,較大的文件不採用這種方法解析。
2)SAX解析
SAX解析,逐行掃描XML文件,遇到標籤時觸發姐系處理器,採用事件處理的方式解析XML,在讀取文件的同時即可對XML進行處理。可以解析超大XML,但是SAX解析只能讀取XML中的資料,無法對資料進行增刪改
3)PULL解析
PULL解析器是一個開源Java專案,既可用於Android應用也可用於JavaEE程式。Android中集成了PULL解析器,因此,Android中常用的就是PULL解析
此處提供一個xml地址:http://bbs.csdn.net/recommend_tech_topics.atom
使用案例:
此處使用pull解析的方式
需要解析的xml:
<entry>
<id>http://bbs.csdn.net/topics/392114349</id>
<published>2017-03-08T15:51:57+08:00</published >
<updated>2017-12-19T15:04:26+08:00</updated>
<link rel="alternate" type="text/html" href="http://bbs.csdn.net/topics/392114349"/>
<title>dubbo下如何使用hibernate的級聯操作</title>
<summary>dubbo下如何使用hibernate的級聯操作</summary>
<author>a461666405</author >
</entry>
<!--部分程式碼,具體點選上面連結 -->
根據xml內容分類建立實體類即可。
新建一個XMLSerivce工具類用來解析xml
public class XMLService {
// 返回資訊集合
public static List<Bean> getNewsInfo(InputStream is) throws Exception {
XmlPullParser parser = Xml.newPullParser(); // 獲取Pull解析器
parser.setInput(is, "utf-8");
List<Bean> list = null;
Bean bean = null;
// 得到當前事件的型別
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
// XML文件的開始START_DOCUMENT 例如:<?xml version="1.0" encoding="UTF-8"?> 0
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<>();
break;
// XML文件節點開始START_TAG 例如:<entry> 2
case XmlPullParser.START_TAG:
bean = new Bean();
if ("entry".equals(parser.getName())) {
Log.e("XML", "<ebtry>");
} else if ("id".equals(parser.getName())) {
String path = parser.nextText();
bean.setPath(path);
Log.e("XML", "path == " + path + "parse == " + parser.getName());
} else if ("published".equals(parser.getName())) {
String published = parser.nextText();
bean.setPublised(published);
Log.e("XML", "published == " + published + "parse == " + parser.getName());
} else if ("updated".equals(parser.getName())) {
String updtaed = parser.nextText();
bean.setUpdated(updtaed);
Log.e("XML", "updated == " + updtaed + "parse == " + parser.getName());
} else if ("title".equals(parser.getName())) {
String title = parser.nextText();
bean.setTitle(title);
Log.e("XML", "title == " + title + "parse == " + parser.getName());
} else if ("summary".equals(parser.getName())) {
String summary = parser.nextText();
bean.setUpdated(summary);
Log.e("XML", "summary == " + summary + "parse == " + parser.getName());
} else if ("author".equals(parser.getName())) {
String author = parser.nextText();
bean.setUpdated(author);
Log.e("XML", "author == " + author + "parse == " + parser.getName());
}
break;
// XML文件的結束節點 如</entry> 3
case XmlPullParser.END_TAG:
if ("entry".equals(parser.getName())) {
Log.e("XML", "解析xml一個節點完成" + parser.getName());
// 處理完一個entry標籤
list.add(bean);
bean = null;
}
break;
}
type = parser.next(); // 解析下一個節點
}
return list;
}
}
在Activity中,
private void pullParseXml(){
final Message message = new Message();
beanList = new ArrayList<>();
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://bbs.csdn.net/recommend_tech_topics.atom");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
int code = conn.getResponseCode();
if (code == 200){
Log.e("XML","請求成功");
InputStream is = conn.getInputStream();
beanList = XMLService.getNewsInfo(is);
Log.e("XML",beanList.size()+ "");
// 成功獲取資料 給主執行緒發訊息
message.what = 3;
handler.sendMessage(message);
}
} catch (Exception e) {
// 獲取資料失敗,給主執行緒發訊息,處理資料
message.what = 4;
handler.sendMessage(message);
e.printStackTrace();
}
}
}).start();
}
得到的資料:
二、Html解析
資料來源來自虎撲體育
1)Jsoup
Jsoup 是一款 Java 的 HTML 解析器,可直接解析某個 URL 地址、HTML 文字內容。它提供了一套非常省力的 API,可通過 DOM,CSS 以及類似於 jQuery 的操作方法來取出和操作資料。
Jsoup的主要功能:
1. 從一個 URL,檔案或字串中解析 HTML;
2. 使用 DOM 或 CSS 選擇器來查詢、取出資料;
3. 可操作 HTML 元素、屬性、文字;
——註釋寫在程式碼裡—–
使用前需要匯入Jsoup的jar包,複製jar包AndroidStudio中lib目錄下並右鍵Add As Library。點選下載
使用案例
private void getDataByJsoup(){
final NewsInfo newsInfo = new NewsInfo();
final Message message = new Message();
newsList.add(newsInfo);
// 開啟一個新執行緒
new Thread(new Runnable() {
@Override
public void run() {
try {
// 網路載入HTML文件
Document doc = Jsoup.connect("https://voice.hupu.com/nba")
.timeout(5000) // 設定超時時間
.get(); // 使用GET方法訪問URL
Elements elements = doc.select("div.list-hd");
for (Element element:elements){
String title = element.select("a").text(); // 新聞標題
String url = element.select("a").attr("href"); // 新聞內容連結
newsInfo.setTitle(title);
newsInfo.setNewsUrl(url);
Log.e("TAG","Jsoup ======>>" + title + url);
}
Elements elements1 = doc.select("div.otherInfo");
for (Element element: elements1){
String time = element.select("a").text(); // 時間
newsInfo.setNewsTime(time);
Log.e("TAG","Jsoup ======>>" + time );
}
message.what = 1;
} catch (IOException e) {
message.what = 2;
e.printStackTrace();
}
handler.sendMessage(message);
}
}).start();
}
獲取的資料:
相關推薦
抓取並解析網頁資料(xml解析、html解析)
網頁有兩種格式,一種是xml另一種是html,目前似乎好像大部分都是html格式的,檢視網頁格式的方法是在瀏覽器中右鍵–>檢視原始碼或者直接F12即可。 一、XML解析 1)DOM解析 DOM(Document Object Mode)是
網路爬蟲中Fiddler抓取PC端網頁資料包與手機端APP資料包
1 引言 在編寫網路爬蟲時,第一步(也是極為關鍵一步)就是對網路的請求(request)和回覆(response)進行分析,尋找其中的規律,然後才能通過網路爬蟲進行模擬。瀏覽器大多也自帶有除錯工具可以進行抓包分析,但是瀏覽器自帶的工具比較輕量,複雜的抓包並不支援。且有時候需要編寫手機APP爬
網頁資料抓取之讀取網頁資料
最近專案中需要用到各大網站的資料,這裡沒用爬蟲,用純java程式碼,無任何外掛,抓取一些自己需要的資料! 後續會記錄主要的幾個網站資料抓取,主要針對帶單個搜尋框的網站!下面是一個公用的讀取網頁資料操作
Java從網路中請求獲取JSon資料以及解析JSON資料----(自創,請註明)
Json資料是比較常用的資料型別解析,優點就不多說啦。來看看方法: public static JSONObject getJsonObject(String url) { JSONObjec
微信小程式聯盟:微信小程式之獲取並解密使用者資料(獲取openId、unionId)
前言在實際的小程式開發中,往往需要使用者授權登陸並獲取使用者的資料,快速對接使用者系統。openId : 使用者在當前小程式的唯一標識 unionId : 如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過unionid來區分使用者的唯一性,因為只要是同一
JAVA微信小程式之獲取並解密使用者資料(獲取openId、unionId)
前言在實際的小程式開發中,往往需要使用者授權登陸並獲取使用者的資料,快速對接使用者系統。openId : 使用者在當前小程式的唯一標識unionId : 如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過unionid來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站
java工具類之Excel檔案匯入、讀取資料(支援xls、和xlsx)
所需的jar包:poi的jar包儘量保持一致,不然會報版本不一致的錯誤下面是程式碼:package ReadExcel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.
androidstudio怎麼使用DDMS檢視DATABASE資料(最權威、親自實踐)
遇到問題,我們的第一個想法是上網尋找答案,可是,面對眾多層次不齊的文章,我們到底能夠有多大的耐心呢? 通過這三張圖片,我想資料是匯出來了。具體怎麼做呢: 資料庫的檢視工具有很多,我這裡用了sqlitestudio和sqlite expert professio
1、lib7z-Memory從記憶體或網路解壓資料(編譯原始碼、前期準備)
7z的壓縮率高,想用它從記憶體或網路請求到的資料中解壓資料到磁碟,這樣就不用再把資料生成.7z檔案在磁碟上,省去了耗時的IO操作,也節省了磁碟資源和時間。用這個技術去實現自己的安裝包也是可以的(把.7z檔案放進exe檔案中,再用這個方法把7z解壓到磁碟上)。想實現這個目的,
機器學習基礎(三十六)—— 非規整資料(值缺失、異常值)的處理
(1)非規整 (2)值缺失 (3)異常值(outlier) 一般來說,現實中的資料會存在資訊不完整、資料點缺失和異常值的情況,理想情況下,我們會去嘗試修復非規整資料,但很多資料集都源於一些難以重現
android 使用epublib開源框架解析epub檔案(章節內容、書籍選單)
前期準備 jsoup(可以可把html標籤,解析為物件): 進入正題 如果你是吧 .equb 格式的檔案放到 assets 檔案下,你可以這樣獲取book物件。 MainActivity.java import android.cont
使用java開源工具httpClient及jsoup抓取解析網頁資料
今天做專案的時候遇到這樣一個需求,需要在網頁上展示今日黃曆資訊,資料格式如下 公曆時間:2016年04月11日 星期一 農曆時間:猴年三月初五 天干地支:丙申年 壬辰月 癸亥日 宜:求子 祈福 開光 祭祀 安床 忌:玉堂(黃道)危日,忌出行 主要包括公曆/農曆日期,以及忌宜資訊的等。但是手
Java抓取網頁資料(原網頁+Javascript返回資料)
轉載請註明出處! 有時候由於種種原因,我們需要採集某個網站的資料,但由於不同網站對資料的顯示方式略有不同! 本文就用Java給大家演示如何抓取網站的資料:(1)抓取原網頁資料;(2)抓取網頁Jav
node.js 小爬蟲抓取網頁資料(2)
node.js 小爬蟲抓取網頁資料 在原來的基礎上,採用了promise的模組,使其可以一次性多頁面的爬取網頁資料。 var http = require('http') var Promise = require('promise') var cheerio = re
Python實例之抓取淘寶商品數據(json型數據)並保存為TXT
sel range ats 表達 隨著 request nic rom .get 本實例實現了抓取淘寶網中以‘python’為關鍵字的搜索結果,經詳細查看數據存儲於html文檔中的js腳本中,數據類型為JSON 通過瀏覽器相關工具發現捧腹網笑話頁面的數據存儲在HTML頁面而
Python爬蟲實戰:抓取並儲存百度雲資源(附程式碼)
尋找並分析百度雲的轉存api 首先你得有一個百度雲盤的賬號,然後登入,用瀏覽器(這裡用火狐瀏覽器做示範)開啟一個分享連結。F12開啟控制檯進行抓包。手動進行轉存操作:全選檔案->儲存到網盤->選擇路徑->確定。點選【確定】前建議先清空一下抓包記錄,這樣可以精確定位到轉存的api,這就是
利用神州靈雲AppTrace抓取到的APP資料反向給做Jmeter介面測試(二)
用jmeter模擬登入月光茶人APP選購支付流程(或者大量併發,實現壓測效果) 現實中APP對登入都有限制,同一賬號只能同時登入一次,且手裡沒有多餘的賬號如何進行併發測試呢,這個時候只需單獨對登入http請求進行控制即可;其他請求操作可以放在一塊進行併發測試;
python爬蟲爬取非同步載入網頁資訊(python抓取網頁中無法通過網頁標籤屬性抓取的內容)
1.問題描述 最近由於學習內容的要求,需要從網頁上抓取一些資料來做分析報告,在看了python爬蟲的一些基礎知識之後就直接上手去網站上爬資料了。作為新手踩坑是無法避免,最近就遇到了一個比較難的問題: 一般情況下,要抓去網頁上某個標籤上的內容,在通過urllib下
自動抓取並解析一個商品頁
以美國adidas官網為例。 輸入url,抓取商品資訊(標題、描述、圖片等);抓取屬性資訊(顏色、尺碼、價格、庫存、skuId)。 思路很簡單,就是開啟頁面,分析各個需要內容的標籤。 獲取頁面 public static Document get
新浪微博爬蟲分享(一天可抓取 1300 萬條資料)
爬蟲功能: 此專案和QQ空間爬蟲類似,主要爬取新浪微博使用者的個人資訊、微博資訊、粉絲和關注(詳細見此)。 程式碼獲取新浪微博Cookie進行登入,可通過多賬號登入來防止新浪的反扒(用來登入的賬號可從淘寶購買,一塊錢七個)。 專案爬的是新浪微