国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 15:34:39
文檔

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹:一、概述 曾幾時(shí),我還是一個(gè)屌絲,一個(gè)在校大學(xué)生,高中的時(shí)候老師就對(duì)我們?nèi)隽艘粋€(gè)慌,說...。人們稱它為一個(gè)善意的謊言,我卻傻傻信以為正。高三的時(shí)候努力拼搏了一段時(shí)間,可惜命運(yùn)總是愛作弄人,高考考到了一個(gè)二流的大學(xué),從此我告別了家鄉(xiāng),踏上了大
推薦度:
導(dǎo)讀HTML解析網(wǎng)絡(luò)爬蟲圖文介紹:一、概述 曾幾時(shí),我還是一個(gè)屌絲,一個(gè)在校大學(xué)生,高中的時(shí)候老師就對(duì)我們?nèi)隽艘粋€(gè)慌,說...。人們稱它為一個(gè)善意的謊言,我卻傻傻信以為正。高三的時(shí)候努力拼搏了一段時(shí)間,可惜命運(yùn)總是愛作弄人,高考考到了一個(gè)二流的大學(xué),從此我告別了家鄉(xiāng),踏上了大

一、概述

? 曾幾時(shí),我還是一個(gè)屌絲,一個(gè)在校大學(xué)生,高中的時(shí)候老師就對(duì)我們?nèi)隽艘粋€(gè)慌,說...。人們稱它為一個(gè)善意的謊言,我卻傻傻信以為正。高三的時(shí)候努力拼搏了一段時(shí)間,可惜命運(yùn)總是愛作弄人,高考考到了一個(gè)二流的大學(xué),從此我告別了家鄉(xiāng),踏上了大學(xué)校門,來到了一個(gè)鳥不生蛋但會(huì)拉屎的地方。剛來大學(xué)的時(shí)候,大一渾渾噩噩的度過,大門不錯(cuò),二門不邁,整體呆在宿舍打游戲,打了大半年的游戲,就那樣,大學(xué)里最美好的日子離我遠(yuǎn)去。往事不堪回首,過了一年,如今已是學(xué)長(zhǎng)了,作為一個(gè)學(xué)長(zhǎng),我不甘落后,于是乎上課努力聽講,下課沒事和同學(xué)去打球或是去圖書館學(xué)習(xí)html,css,javascript,java,過著四點(diǎn)一線的生活,在大二一年里拿了兩次獎(jiǎng)學(xué)金。如今,已經(jīng)是大三...,時(shí)間還在流逝,現(xiàn)在還是個(gè)屌絲,一個(gè)苦逼的大學(xué)生,還有事沒事喜歡爬各種網(wǎng)站,來滿足自己那點(diǎn)小小的虛榮心...。好了,扯淡時(shí)間過,該寫代碼了。

?原諒我那點(diǎn)發(fā)自內(nèi)心的扯淡。下面我們開始進(jìn)入今天的主題,HTML解析和網(wǎng)絡(luò)爬蟲。

什么是html,網(wǎng)絡(luò)爬蟲?

?什么是html這里就不多說了,那么什么是網(wǎng)絡(luò)爬蟲呢?是不是在網(wǎng)絡(luò)上怕的蟲?哈哈,簡(jiǎn)直是弱爆了,在前面扯淡的內(nèi)容中提到了,我喜歡爬各種網(wǎng)站,我爬過我學(xué)校的官網(wǎng)和教務(wù)管理系統(tǒng),爬過各種IT網(wǎng)站,做了個(gè)簡(jiǎn)單的新聞客戶端。網(wǎng)絡(luò)爬蟲其實(shí)是指自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本,或者說是動(dòng)態(tài)地抓取網(wǎng)站數(shù)據(jù)的程序。

怎樣解析html?

?這里我們通過Java解析html的利器Jsoup解析html,使用jsoup輕松搞定html解析,讓你從一個(gè)從矮窮挫瞬間變身高大上,高端大氣上檔次。

為什么要解析html?

?我們都知道現(xiàn)在網(wǎng)絡(luò)數(shù)據(jù)傳輸有三種常用的形式,xml,json(【JSON解析】JSON解析高手)和html,我們的客戶端請(qǐng)求服務(wù)器,服務(wù)器通常給我們返回上面三種形式的數(shù)據(jù)。同時(shí)如果是個(gè)人開發(fā),由于沒有自己的服務(wù)器,那么我們開發(fā)的應(yīng)用程序就可以通過爬別人的網(wǎng)站解析html得到我們要的數(shù)據(jù),當(dāng)然,這種方式得到的數(shù)據(jù)不推薦,同時(shí)也存在太多的局限了,如:受網(wǎng)站的限制,解析困難等等。當(dāng)然看了這篇文章解析就不是困難了,呵呵。

二、Jsoup和資源準(zhǔn)備

jsoup介紹:

?jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)。

主要功能:

  1. 從一個(gè)URL,文件或字符串中解析HTML;

  2. 使用DOM或CSS選擇器來查找、取出數(shù)據(jù);

  3. 可操作HTML元素、屬性、文本;

jar包下載(兩種方式):

  1. 官網(wǎng)下載最新版:http://jsoup.org/download

  2. jsoup-1.8.3.jar(jar,doc和源碼)

jsoup更多信息查看官網(wǎng):http://jsoup.org

三、HTML解析實(shí)戰(zhàn)

?新建一個(gè)Android項(xiàng)目(編碼設(shè)為UTF-8),將下載的jsoup的jar包添加到項(xiàng)目的libs目錄下,并添加到構(gòu)建路徑中,這里由于不打算開發(fā)一個(gè)完整的應(yīng)用,所以用的開發(fā)工具是我們更熟悉的eclipse,簡(jiǎn)單點(diǎn),不用Android Studio(as),用as也一樣。

作為測(cè)試數(shù)據(jù),我們來爬一下這個(gè)網(wǎng)站:http://it.ithome.com/

訪問這個(gè)網(wǎng)站,可以看到現(xiàn)在最新的頁面顯示如下,當(dāng)然,它的文章會(huì)不斷更新,這是寫文章的時(shí)候的頁面(頁面的一部分):

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

?我們的任務(wù)是把文章的相關(guān)信息抓下來,包括:

  1. 文章左邊的圖片url

  2. 文章的標(biāo)題article

  3. 文章的內(nèi)容簡(jiǎn)介summary

  4. 底部的關(guān)鍵字tags

  5. 右上角的發(fā)表時(shí)間postime

如下圖:

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

OK,確定好了我們要抓取的信息后,我們通過瀏覽器調(diào)試工具Firebug打開查看該頁面的源碼找到我們關(guān)心數(shù)據(jù)的部分:

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

?這個(gè)ul里面的li第一個(gè)不是我們想要的數(shù)據(jù)外,其他的每個(gè)li中都保存了一篇文章的信息。選擇其中兩個(gè)看看。

HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

下面我們可以編寫解析代碼了。

第一步:新建JavaBean,Article.java

package com.jxust.lt.htmlparse;

/**
 * 文章bean
 * @author lt
 *
 */
public class Article {

 private String title; // 標(biāo)題
 private String summary; // 文章內(nèi)容簡(jiǎn)介
 private String imageUrl; // 圖片url
 private String tags; // 關(guān)鍵子
 private String postime; // 發(fā)表時(shí)間
 
 // setter...
 // getter...
 
 @Override
 public String toString() {
 return "Article [title=" + title + ", summary=" + summary
 + ", imageUrl=" + imageUrl + ", tags=" + tags + ", postime="
 + postime + "]";
 }
}

第二步:新建一個(gè)工具類,HtmlParseUtil.java,寫一個(gè)連接網(wǎng)絡(luò)并解析返回的html頁面的方法:

/**
 * 請(qǐng)求網(wǎng)絡(luò)加載數(shù)據(jù)得到文章的集合
 * @param url:網(wǎng)站url
 */
 public static List<Article> getArticles(String url){
 List<Article> articles = new ArrayList<Article>();
 Connection conn = Jsoup.connect(url);
 try {
 // 10秒超時(shí)時(shí)間,發(fā)起get請(qǐng)求,也可以是post
 Document doc = conn.timeout(10000).get();
 // 1. 只要我們關(guān)心的信息數(shù)據(jù),這里使用css類選擇器
 Element ul = doc.select(".ulcl").get(0);
 // 2. 得到所有的li,排除個(gè)別不是同種類型的數(shù)據(jù)
 Elements lis = ul.getElementsByTag("li");
 for(int i=1;i<lis.size();i++){ // 通過FileBug發(fā)現(xiàn)這個(gè)網(wǎng)頁里面第一個(gè)li不是我們要的類型,所以從1開始
 Article article = new Article();
 Element li = lis.get(i);
 // 數(shù)據(jù)1,得到圖片的url,通過img標(biāo)簽的src屬性獲得
 Element img = li.getElementsByTag("img").first();
 // 獲取標(biāo)簽的屬性值,參數(shù)為屬性名稱
 String imageUrl = img.attr("src");
 // 數(shù)據(jù)2,得到文章的標(biāo)題
 Element h2 = li.getElementsByTag("h2").first();
 // 取h2元素下面的第一個(gè)a標(biāo)簽的文本即為標(biāo)題
 String title = h2.getElementsByTag("a").first().text();
 // 數(shù)據(jù)3,得到文章的發(fā)表時(shí)間,取h2元素下面的第一個(gè)span標(biāo)簽的文本即為文章發(fā)表時(shí)間
 String postime = h2.getElementsByTag("span").first().text();
 // 數(shù)據(jù)4,得到文章內(nèi)容簡(jiǎn)介,取li下面第一個(gè)p標(biāo)簽的文本
 String summary = li.getElementsByTag("p").first().text();
 // 數(shù)據(jù)5,得到文章的關(guān)鍵字,取li下面的class為tags的第一個(gè)元素的所有的a標(biāo)簽文本
 Element tagsSpan = li.getElementsByClass("tags").first();
 Elements tags = tagsSpan.getElementsByTag("a");
 String key = "";
 for(Element tag : tags){
 key+=","+tag.text();
 }
 // 去掉key的第一個(gè)","號(hào)
 key = key.replaceFirst(",", "");
 
 article.setTitle(title);
 article.setSummary(summary);
 article.setImageUrl(imageUrl);
 article.setPostime(postime);
 article.setTags(key);
 articles.add(article);
 }
 } catch (Exception ex) {
 ex.printStackTrace();
 } 
 return articles;
 }

?在清單文件下添加請(qǐng)求網(wǎng)絡(luò)權(quán)限:

<uses-permission android:name="android.permission.INTERNET"/>

?說明:請(qǐng)求網(wǎng)絡(luò)得到Document對(duì)象后(不要導(dǎo)出包,是jsoup下的),通過select()方法帥選了class為ulcl的ul元素,該頁面下只有一個(gè)class為ulcl,ul下面第一個(gè)li不是我們要的,排除,然后得到每個(gè)li對(duì)象,每個(gè)li元素包含一篇文章的信息,解析重要方法說明:

  1. Document.select(String cssQuery):通過css選擇器獲取E元素集Elements

  2. Element.getElementsByTag(String tagName):通過標(biāo)簽名稱獲取元素Elements

  3. Element.getElementsByClass(String className):通過標(biāo)類選擇器獲取元素Elements

  4. Element.getElementById(String id):通過id獲取元素Element

  5. Element.attr(String attrName):通過屬性名獲取屬性值

  6. Element.text():獲取標(biāo)簽元素的文本

?有js的DOM及JQuery編程經(jīng)驗(yàn)的人應(yīng)該很容易理解上面的方法,更多的方法信息使用查看Jsoup官網(wǎng)文檔。

第三步:測(cè)試解析結(jié)果:

使用android單元測(cè)試:

  • 在AndroidManifest.xml添加instrumentation

  • <instrumentation android:targetPackage="com.jxust.lt.htmlparse" android:name="android.test.InstrumentationTestRunner"></instrumentation>
  • 在AndroidManifest.xml添加use-library

  • <uses-library android:name="android.test.runner"/>

    新建一個(gè)測(cè)試類HtmlParseTest.java繼承AndroidTestCase

    ?寫一個(gè)測(cè)試方法:

     public void testParseHtml(){
     List<Article> articles = HtmlParseUtil.getArticles(url); for(int i=0;i<articles.size();i++){
     Log.e("result"+i, articles.get(i).toString());
     }
     }

    ?這里的url的值為:"http://it.ithome.com/"

    打開模擬器運(yùn)行測(cè)試方法 Run As Android JUnit Test

    日志輸出結(jié)果:

    這里寫圖片描述

    ...

    HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

    可以看到我們得到了20條數(shù)據(jù),我們來看看其中的一條

    HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

    ?可以看到文章標(biāo)題,內(nèi)容簡(jiǎn)介,圖片url,關(guān)鍵字,發(fā)表時(shí)間5個(gè)我們關(guān)心的數(shù)據(jù)全都解析出來了。到這里html解析結(jié)束了,現(xiàn)在我們有了數(shù)據(jù),那么我們就可以將數(shù)據(jù)顯示在listView中了(這里不會(huì)將數(shù)據(jù)顯示在ListView中,這個(gè)很簡(jiǎn)單,一個(gè)布局一個(gè)適配器就搞定了,不懂的可以問),從而可以自己為網(wǎng)站寫個(gè)新聞客戶端了,把要的數(shù)據(jù)全都抓取下來,體驗(yàn)一下將別人的數(shù)據(jù)為我所用的快樂,呵呵。

    總結(jié)一下:

    jsoup解析html的步驟:

    1. 得到Document對(duì)象:

  • 通過發(fā)送Jsoup的get或者post請(qǐng)求返回Document對(duì)象

  • 將html字符串轉(zhuǎn)換成Document對(duì)象(通過Jsoup.parse()方法):

    1. 使用Document.select()進(jìn)行初步篩選數(shù)據(jù)

    2. 使用Element的一系列方法篩選出我們要的數(shù)據(jù)

    注意:要對(duì)照頁面源碼解析,解析任何數(shù)據(jù)之前我們都得先知道要解析數(shù)據(jù)的結(jié)構(gòu),看著html頁面的源碼調(diào)用Document,Element等對(duì)象的相關(guān)方法怎么簡(jiǎn)單怎么解析。

    jsoup的get和post請(qǐng)求網(wǎng)絡(luò)在實(shí)際運(yùn)用中使用不多,通常我會(huì)將jsoup和Volley,XUtils,Okhttp等著名的android網(wǎng)絡(luò)框架結(jié)合使用,即請(qǐng)求網(wǎng)絡(luò)用Volley等框架,解析用Jsoup,至少我就是這樣做的。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    HTML解析網(wǎng)絡(luò)爬蟲圖文介紹

    HTML解析網(wǎng)絡(luò)爬蟲圖文介紹:一、概述 曾幾時(shí),我還是一個(gè)屌絲,一個(gè)在校大學(xué)生,高中的時(shí)候老師就對(duì)我們?nèi)隽艘粋€(gè)慌,說...。人們稱它為一個(gè)善意的謊言,我卻傻傻信以為正。高三的時(shí)候努力拼搏了一段時(shí)間,可惜命運(yùn)總是愛作弄人,高考考到了一個(gè)二流的大學(xué),從此我告別了家鄉(xiāng),踏上了大
    推薦度:
    標(biāo)簽: 介紹 圖文 詳解
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 欧美日韩国 | 一级毛片一级毛片 | 日韩在线一区二区 | 亚洲 欧美 自拍 另类 | 亚洲欧美日韩中文字幕在线不卡 | 亚洲欧美影院 | 久久精品欧美日韩精品 | 日韩欧美一区二区三区免费观看 | 夜夜骑首页 | 日韩精品一区二区三区 在线观看 | 全免费午夜一级毛片一级毛 | 亚洲 欧美 中文 日韩专区 | 欧美一级爱操视频 | 欧美 在线播放 | 99在线视频观看 | 亚洲小色网 | 欧美 日韩 视频 | 亚洲国产欧美日韩精品一区二区三区 | 国产麻豆91 | 日本色图在线观看 | 99精品视频在线观看免费播放 | 精品国产一区二区三区免费看 | 国产精品综合一区二区 | 中文字幕久久亚洲一区 | 欧美综合国产 | 国产精品路线1路线2路线 | 日韩高清在线观看 | 午夜视频一区 | 中文在线第一页 | 亚洲国产成人久久一区久久 | 久久国产成人精品 | 精品国产欧美一区二区三区成人 | 成人一级免费视频 | 国产一在线 | 性插欧美| 福利三区 | 欧美日韩大尺码免费专区 | 久久亚洲精品国产精品777777 | 精品91精品91精品国产片 | 国产在线成人一区二区 | 成人免费久久精品国产片久久影院 |