程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Jsoup使用隨記,Jsoup使用

Jsoup使用隨記,Jsoup使用

編輯:JAVA綜合教程

Jsoup使用隨記,Jsoup使用


這段時間工作比較空閒,在網上找資料學習的時候看到數據抓取這一塊,來了興趣

用jsoup實現數據抓取著實方便,唯一美中不足的是官方API是英文版的,對我這樣英語水平不好的程序員來說著實困擾,只能一點點的去實踐

所以有了這篇隨記,以後用的時候好回頭溫習溫習

Jsoup的一系列解析html操作是基於Document這個實例對象的,實例化方式有很多種,通過url,通過文件,通過字符串。

這裡我用的是url的方式,用來解析一個網站上的某些內容

eg:

Document doc = Jsoup.connect(url).get();

這個是官方提供的實例化方法,然而我使用的時候控制台報錯

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=XXX

後來網上找了一下原因:

有些網站的服務器在響應http請求的時候,需要客戶端提交的信息比較完善,而在Jsoup的Connection類中這個Header就是完善請求信息用的。

我們的浏覽器在請求網頁的時候會在請求的頭部head中發送一些數據,比如浏覽器類型,版本,語言等等。當我們用Jsoup去完成請求網頁的工作時,最好也要完善請求包頭信息,完成這個工作的就是header方法。

在實例化的時候加上

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").get();

就能解決這個報錯問題

doc操作方法,大部分跟JavaScript中的差不多,見名知意

getElementsByTag() : 獲取某個節點

getElementsByClass() : 獲取某個class中的節點

getElementById() : 獲取某個id中的節點

等等

通過這些方法返回的是Element對象

通過Element對象可以繼續往下操作

children() : 獲取子節點,這個我試過,獲取到的只是第一個子節點

text() : 獲取文本

attr() : 獲取該節點的屬性值

放上一段代碼片:

Document docu = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").get();
Elements ele = docu.getElementsByClass("text");  //獲取class為text的節點內容
for(Element e : ele){  //循環
Elements uurl = e.children();
String t = uurl.text(); //獲取標題
String hr = uurl.attr("href"); //獲取鏈接
Document docum = Jsoup.connect(hr).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").get();  //根據上一步獲取的鏈接,執行解析該鏈接的html
Element elem = docum.getElementById("contentText");
Elements elems = elem.getElementsByTag("p");
String text = elems.text(); //獲取內容
}

代碼片段是用來抓取某網站的數據

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved