天天看點

爬蟲Jsoup入門及應用-看這一篇就夠了爬蟲架構Jsoup入門及應用擷取Document對象資料提取相關導航

爬蟲架構Jsoup入門及應用

第一個例子

  • 第一個例子,我們來做一個爬取百度首頁的标題。如圖
    爬蟲Jsoup入門及應用-看這一篇就夠了爬蟲架構Jsoup入門及應用擷取Document對象資料提取相關導航
  1. 建立一個Maven項目。
  2. 導入Jsoup依賴
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.3</version>
</dependency>
           
  1. 詳細代碼
public class Test {
    public static void main(String[] args) throws IOException {

        Document document = Jsoup.connect("http://www.baidu.com").get();

        System.out.println(document.title());
    }
}
           
  1. 程式輸出
百度一下,你就知道
           

是不是超級簡單?沒錯,就是這麼簡單

做個總結:通過Jsoup.connect(“http://www.baidu.com”).get()我們擷取到了百度首頁的HTML文檔并傳回一個Document對象(它就代表了HTML文檔),使用Document對象的title()方法擷取到了HTML文檔的标題。

擷取Document對象

擷取Document對象有如下幾種方法

1. 字元串擷取

第一種:

  • 代碼
Document document = Jsoup.parse("<style>p {font-size:10px}</style>");
System.out.println(document);
           
  • 程式輸出
<html>
 <head>
  <style>p {font-size:10px}</style>
 </head>
 <body></body>
</html>
           
  • 可以看到Document對象是一個完整的HTML結構,對于缺失的标簽,jsoup庫幫我們補全。但是是補全在标簽裡面的。

第二種:

  • 代碼
Document document = Jsoup.parseBodyFragment("<style>p {font-size:10px}</style>");
System.out.println(document);
           
  • 程式輸出
<html>
 <head></head>
 <body>
  <style>p {font-size:10px}</style>
 </body>
</html>
           
  • 對應缺失的标簽,Jsoup幫我們補齊在标簽裡面。

2.URL擷取

  • 這個可以說是最常用的了,如我們的“第一個例子”,
Document document = Jsoup.connect("http://www.baidu.com").get();
System.out.println(document);
           
  • 這裡就不寫輸出了,這裡輸出的就是百度首頁的html的靜态檔案了

3.檔案擷取

  • 該方法從檔案中解析出一個

    Document

    對象,我們将百度首頁的html文檔儲存到本地,然後用此方法得到一個

    Document

    對象:
  • 代碼如下
File file = new File("./index.html");
Document document = Jsoup.parse(file, "UTF-8");
System.out.println(document);
           

資料提取

  • 當我們擷取到網頁的html内容之後,要做的當然是提取其中的資料為我們自己所用。

1.Document方法提取

  • 擷取到了

    Document

    對象之後,我們可以通過它的很友善的方法提取資料。
  • 在Document對象上我們可以使用一些類DOM方法,比如
Document doc = Jsoup.connect("http://www.baidu.com").get();
// 方法
doc.getElementById(String id);		// 通過标簽的id 來提取标簽
doc.getElementsByTag(String tag);	// 通過标簽名來提取标簽,如"a","button"
doc.getElementsByClass(String className);	// 通過标簽的class屬性來提取标簽,
doc.getElementsByAttribute(String key); // 根據标簽是否擁有某個屬性來提取标簽,比如"href","src"
           

示例

  • 擷取百度首頁中所有的 <a> 标簽
Document document = Jsoup.connect("http://www.baidu.com").get();

// 1、擷取百度首頁中所有的<a>标簽
Elements a = document.getElementsByTag("a");
for (Element element : a) {
    System.out.println(a);
}
           
  • 程式輸出,(這裡隻列出部分,太多了)
<a class="toindex" href="/">百度首頁</a>
<a href="javascript:;" name="tj_settingicon" class="pf">設定<i class="c-icon c-icon-triangle-down"></i></a>
<a href="https://passport.baidu.com/v2/?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2F&amp;sms=5" name="tj_login" class="lb" onclick="return false;">登入</a>
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新聞</a>
<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
<a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地圖</a>
<a href="https://live.baidu.com/" target="_blank" class="mnav c-font-normal c-color-t">直播</a>
           

1.1Element提取

  • 在上面的例子中,我們擷取了

    Elements

    對象,

    Elements

    對象就是一個個

    <html>

    的标簽集合,通過對

    Elements

    對象的周遊,可以得到

    Element

    對象,

    Element

    就是一個一個的标簽具體,我們可以對

    Element

    标簽進行進一步的提取,常用方法如下:
Elements elements = document.getElementsByTag("a");
for (Element element : elements) {
    element.attr(String key)	// 擷取元素key屬性的值,如:“href”,"src"
	element.attributes()		// 擷取元素所有屬性
	element.id()				// 擷取元素id屬性的值
	element.className()			// 擷取元素class屬性的值
	element.classNames()	
	element.text()				// 擷取元素内容
}
           

- 舉個栗子

Document document = Jsoup.connect("http://www.baidu.com").get();
Elements elements = document.getElementsByTag("a");
for (Element element : elements) {
    System.out.println(element.text() + " : " + element.attr("href"));
}
           
  • 程式輸出(隻列出部分)
登入 : https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F&sms=5
新聞 : http://news.baidu.com
hao123 : https://www.hao123.com
地圖 : http://map.baidu.com
直播 : https://live.baidu.com/
視訊 : https://haokan.baidu.com/?sfrom=baidu-top
貼吧 : http://tieba.baidu.com
學術 : http://xueshu.baidu.com
           

2.選擇器提取

  • 除了類Document方法外,還可以使用CSS選擇器文法對元素進行篩選,主要是用

    Element.select(String selector)

    方法。

- 舉個栗子

  • 通過

    select()

    方法找到了所有帶有

    href

    屬性的

    a

    标簽。值得注意的是,

    select()

    方法可以在

    Document

    Element

    Elements

    對象上使用。
Document document = Jsoup.connect("http://www.baidu.com").get();   
Elements elements = document.select("a[href]");
for (Element element : elements) {
    System.out.println(element.text() + " : " + element.attr("href"));
}
           
  • 程式輸出(隻列出部分)
資訊 : https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news
視訊 : http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&ie=utf-8
圖檔 : http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8
知道 : http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&fr=wwwt
文庫 : http://wenku.baidu.com/search?lm=0&od=0&ie=utf-8
貼吧 : http://tieba.baidu.com/f?fr=wwwt
地圖 : https://map.baidu.com/?newmap=1&ie=utf-8&s=s
采購 : https://b2b.baidu.com/s?fr=wwwt
更多 : http://www.baidu.com/more/
           

2.1常見用法

Document document = Jsoup.connect(url).get();
// 擷取所有<div>标簽中有class="item"的标簽,如
// <div class="item"></div>
Elements elements = document.select("div.item");
           
Document document = Jsoup.connect(url).get();   
// 擷取所有存在href屬性的<a>标簽,如:
// <a href="http://baidu.com/" target="_blank" rel="external nofollow" >首頁</a>
Elements elements = document.select("a[href]");
           

2.2select更多用法

官方文檔:官方文檔

CSDN:CSDN

相關導航

通俗易懂的正規表達式入門及應用

javaScript中操作數組的高階方法filter、map、reduce及for循環三種周遊形式