最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java爬蟲利器Jsoup

 更新時間:2023年06月16日 08:39:45   作者:蜀山劍客李沐白  
Jsoup是一款Java語言開發(fā)的HTML解析器,用于解析HTML文檔以及對HTML文檔進(jìn)行操作,處理等,本文就將詳細(xì)給大家介紹一下Java中的爬蟲利器Jsoup,感興趣的同學(xué)可以參考一下

Jsoup的概述

Jsoup是一款Java語言開發(fā)的HTML解析器,用于解析HTML文檔以及對HTML文檔進(jìn)行操作,處理等。它提供了類似于jQuery的DOM操作方法,以及用于HTML元素遍歷、迭代、查詢以及修改等操作的API,同時還支持CSS選擇器和正則表達(dá)式的解析。

Jsoup的特點

  • 可以從URL中直接獲取網(wǎng)頁的內(nèi)容并進(jìn)行解析。
  • 支持CSS選擇器和正則表達(dá)式。
  • 采用DOM結(jié)構(gòu),直觀簡單。
  • 支持流暢的鏈?zhǔn)讲僮黠L(fēng)格。
  • 支持屬性查找和修改。
  • 支持XML解析。

Jsoup的優(yōu)點

  • 簡單、方便、易學(xué)易用。
  • Jsoup的相對性能比較高,特別是在處理大型HTML文件時。
  • 支持CSS選擇器及正則表達(dá)式等復(fù)雜操作。
  • Jsoup對HTML進(jìn)行清理,可以特別有效地防止XSS腳本攻擊。
  • 能夠與Java內(nèi)部的文檔模型(DOM)結(jié)合,符合Java的運(yùn)行環(huán)境。

Jsoup的核心類

以下是Jsoup中最重要的幾個核心類:

  • Document:代表整個HTML或XML文檔??梢酝ㄟ^該類來獲取所需的元素、屬性等。
  • Element:代表HTML中的一個元素。例如, ,

    等。

  • Elements:代表多個元素組成的集合,即一個數(shù)組。
  • Node:代表一個節(jié)點,可以是文本、注釋或者其他類型的節(jié)點。
  • TextNode:代表文本節(jié)點,主要用于獲取標(biāo)簽之間的文本內(nèi)容。
  • Attribute:代表HTML元素中的屬性。

Jsoup的用法

這里我將從以下方面介紹Jsoup的用法:

1.導(dǎo)入Jsoup到項目中

在使用Jsoup前,需要將它添加到項目的依賴中。如果使用Maven,只需要在pom.xml文件中添加下面的代碼即可:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>

2.解析HTML文檔

解析HTML的第一步是將HTML文檔加載到Jsoup的Document對象中,以便進(jìn)行后續(xù)操作。可以通過以下方式實現(xiàn):

String html = "<html><head><title>Jsoup Example</title></head>"
        + "<body><p>Hello world!</p></body></html>";
Document doc = Jsoup.parse(html);

其中,Jsoup.parse(html)可以將字符串轉(zhuǎn)換為Document對象,而html則是需要解析的HTML。

3.從URL加載HTML

除了直接解析HTML字符串,Jsoup還支持從URL地址獲取HTML內(nèi)容并進(jìn)行解析??梢允褂靡韵麓a:

String url = "http://www.example.com/";
Document doc = Jsoup.connect(url).get();

其中,Jsoup.connect(url).get()可以從指定的url地址獲取HTML內(nèi)容并解析成Document對象。

4.使用選擇器查找元素

Jsoup支持類似于jQuery的CSS選擇器語法,可以用非常簡單的方式查找HTML元素。例如,查找所有的p標(biāo)簽,可以使用如下代碼:

Elements paragraphs = doc.select("p");

select()方法會返回匹配選擇器的元素的集合。

更進(jìn)一步來說,選擇器可以根據(jù)標(biāo)簽名、屬性、樣式等多種條件篩選元素。例如,以下代碼會查找所有帶有href屬性的鏈接:

Elements links = doc.select("a[href]");

如果要查找指定class的元素,可以使用類似于CSS的“.classname”語法:

Elements elementsByClass = doc.select(".classname");

同樣地,也支持按屬性值進(jìn)行查找:

Elements links = doc.select("a[href=\"#\"]");

這些選擇器可以非常靈活地精準(zhǔn)定位到需要的HTML元素。

5.獲取元素的屬性和內(nèi)容

在定位到所需的HTML元素后,可以使用Jsoup提供的方法獲取元素的屬性和內(nèi)容。例如,以下代碼可以獲取a標(biāo)簽的href屬性和顯示的文本內(nèi)容:

Element link = doc.select("a").first();
String href = link.attr("href");
String text = link.text();

attr()方法可以獲取指定屬性的值,而text()方法可以獲取標(biāo)簽之間的文本內(nèi)容。

6.修改HTML文檔

Jsoup不僅可以解析HTML文檔,還可以修改文檔中的元素、屬性等內(nèi)容??梢允褂靡韵麓a:

Element link = doc.select("a").first();
link.attr("href", "http://www.newsite.com/");
link.text("New Site");

這些方法可以非常方便地修改HTML文檔中的元素和屬性。

7.處理HTML中的正文

有時候我們只需要解析HTML中的正文部分而不是全文,這種情況下可以使用Jsoup提供的方法實現(xiàn)。例如,以下代碼可以提取HTML中的所有正文段落:

Document doc = Jsoup.parse(html);
Elements paragraphs = doc.select("p");
String text = paragraphs.text();

上面代碼中,Jsoup首先解析HTML文檔并查找所有的p標(biāo)簽,然后使用text()方法提取正文內(nèi)容。

Jsoup的高級用法

了解了基本用法后,我們可以進(jìn)一步了解Jsoup的高級用法,例如:

1.從HTML中提取圖片

可以使用以下代碼提取出HTML文檔中的所有圖片:

Document doc = Jsoup.connect(url).get();
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");

這里的正則表達(dá)式可以過濾掉非圖片類型的元素。

2.從HTML中提取所有鏈接

可以使用以下代碼提取出HTML中的所有鏈接:

Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");

然后遍歷links集合,即可獲取每個鏈接的href屬性和文本內(nèi)容。

3.自定義User-Agent和超時時間

可以通過以下方式指定Jsoup連接的User-Agent和超時時間:

String url = "http://www.example.com/";
Connection conn = Jsoup.connect(url);
conn.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
conn.timeout(5000);
Document doc = conn.get();

其中userAgent()方法可以設(shè)置User-Agent,timeout()方法可以設(shè)置超時時間,單位是毫秒。

4.處理HTML中的中文編碼問題

當(dāng)解析包含中文字符的HTML文檔時,可能會出現(xiàn)亂碼等問題??梢酝ㄟ^以下方式解決:

Document doc = Jsoup.parse(html, "UTF-8");
String title = doc.title();
String text = doc.text();

這里的"UTF-8"指定了HTML文檔的字符集,以解決編碼問題。

5.處理HTML中的表格

可以使用以下代碼提取表格中的數(shù)據(jù):

Document doc = Jsoup.connect(url).get();
Elements tableRows = doc.select("table tr");
for (Element row : tableRows) {
    Elements cells = row.select("td");
    for (Element cell : cells) {
        String cellText = cell.text();
    }
}

這里先通過選擇器查找所有的tr標(biāo)簽,然后對每個tr標(biāo)簽內(nèi)的td標(biāo)簽進(jìn)行遍歷,獲取單元格的內(nèi)容。

6.處理HTML中的特殊字符

有些HTML文檔中包含特殊字符,例如©、™等符號,這些符號可能會導(dǎo)致解析錯誤??梢允褂靡韵路绞浇鉀Q:

Document doc = Jsoup.parse(html);
doc.outputSettings().escapeMode(EscapeMode.base);
String text = doc.text();

這里的escapeMode()方法可以指定轉(zhuǎn)義字符的模式,base模式表示只轉(zhuǎn)義基本的字符,其他的字符不做轉(zhuǎn)義。

7.使用代理連接網(wǎng)站

有些網(wǎng)站可能會禁止爬蟲訪問,可以使用代理服務(wù)器連接到網(wǎng)站??梢允褂靡韵麓a設(shè)置代理:

String url = "http://www.example.com/";
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyhost", 8080));
Connection conn = Jsoup.connect(url).proxy(proxy);
Document doc = conn.get();

其中proxy()方法可以設(shè)置代理服務(wù)器的地址和端口號。

8.處理HTML中的連接

可以使用以下代碼將相對路徑轉(zhuǎn)換為絕對路徑:

String url = "http://www.example.com/";
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
for (Element link : links) {
    String absLink = link.attr("abs:href");
}

這里的abs()方法可以將相對路徑轉(zhuǎn)換為絕對路徑,從而能夠正確地訪問鏈接。

9.使用Jsoup處理XML

除了HTML,Jsoup還能夠處理XML文檔??梢允褂靡韵麓a解析XML文檔:

String xml = "<root><item>1</item><item>2</item><item>3</item></root>";
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
Elements items = doc.select("item");

這里的xmlParser()方法將Jsoup的解析器設(shè)置為XML模式,然后就可以使用CSS選擇器查找XML元素了。

10.處理HTML中的圖片

有時候我們需要將HTML中的圖片下載到本地使用??梢允褂靡韵麓a實現(xiàn):

String imageUrl = "http://www.example.com/image.jpg";
Connection.Response resultImageResponse = Jsoup.connect(imageUrl).ignoreContentType(true).maxBodySize(0).execute();
byte[] imageBytes = resultImageResponse.bodyAsBytes();

這里的ignoreContentType()方法可以忽略ContentType的檢查,maxBodySize()方法可以設(shè)置請求的最大字節(jié)數(shù)。然后可以將結(jié)果寫入文件或者流中,以保存圖片內(nèi)容。

以上就是詳解Java爬蟲利器Jsoup的用法的詳細(xì)內(nèi)容,更多關(guān)于Java爬蟲利器Jsoup的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Hibernate4執(zhí)行save()或update()無效問題的方法

    解決Hibernate4執(zhí)行save()或update()無效問題的方法

    這篇文章主要為大家詳細(xì)介紹了解決Hibernate4執(zhí)行save()或update()無效問題的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能示例

    Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能示例

    這篇文章主要介紹了Java編程實現(xiàn)的二維數(shù)組轉(zhuǎn)置功能,結(jié)合實例形式分析了Java二維數(shù)組的遍歷、運(yùn)算、賦值等實現(xiàn)轉(zhuǎn)置的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java AES256加密解密示例代碼

    Java AES256加密解密示例代碼

    這篇文章主要介紹了Java AES256加密解密示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java?ConcurrentHashMap實現(xiàn)線程安全的代碼示例

    Java?ConcurrentHashMap實現(xiàn)線程安全的代碼示例

    眾所周知ConcurrentHashMap是HashMap的多線程版本,HashMap?在并發(fā)操作時會有各種問題,而這些問題,只要使用ConcurrentHashMap就可以完美解決了,本文將給詳細(xì)介紹ConcurrentHashMap是如何保證線程安全的
    2023-05-05
  • Springboot中如何使用Redisson實現(xiàn)分布式鎖淺析

    Springboot中如何使用Redisson實現(xiàn)分布式鎖淺析

    redisson是redis的java客戶端程序,國內(nèi)外很多公司都有在用,下面這篇文章主要給大家介紹了關(guān)于Springboot中如何使用Redisson實現(xiàn)分布式鎖的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java中的分割字符串?split(“.”)無效問題

    Java中的分割字符串?split(“.”)無效問題

    這篇文章主要介紹了Java中的分割字符串?split(“.”)無效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringCloud?微服務(wù)數(shù)據(jù)權(quán)限控制的實現(xiàn)

    SpringCloud?微服務(wù)數(shù)據(jù)權(quán)限控制的實現(xiàn)

    這篇文章主要介紹的是權(quán)限控制的數(shù)據(jù)權(quán)限層面,意思是控制可訪問數(shù)據(jù)資源的數(shù)量,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • 利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • SpringBoot+SpringCloud用戶信息微服務(wù)傳遞實現(xiàn)解析

    SpringBoot+SpringCloud用戶信息微服務(wù)傳遞實現(xiàn)解析

    這篇文章主要介紹了SpringBoot+SpringCloud實現(xiàn)登錄用戶信息在微服務(wù)之間的傳遞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot中日志輸出規(guī)范的五種策略

    SpringBoot中日志輸出規(guī)范的五種策略

    在企業(yè)級應(yīng)用開發(fā)中,合理規(guī)范的日志記錄是系統(tǒng)穩(wěn)定運(yùn)行、問題排查和性能優(yōu)化的關(guān)鍵保障,SpringBoot作為流行的Java開發(fā)框架,提供了強(qiáng)大而靈活的日志支持,但如何建立統(tǒng)一、高效的日志輸出規(guī)范卻是許多團(tuán)隊面臨的挑戰(zhàn),本文將介紹SpringBoot中5種日志輸出規(guī)范策略
    2025-06-06

最新評論

利川市| 临泽县| 萨迦县| 合阳县| 沧州市| 双辽市| 梁河县| 清流县| 甘洛县| 微山县| 镇巴县| 泗阳县| 茌平县| 镇雄县| 沙田区| 平顺县| 东宁县| 云龙县| 彰化县| 通辽市| 周口市| 龙山县| 轮台县| 中超| 印江| 延庆县| 闽侯县| 三明市| 右玉县| 固阳县| 乳源| 温宿县| 昌平区| 永胜县| 沛县| 磐石市| 龙州县| 扎赉特旗| 肥城市| 天水市| 桂阳县|