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

詳解Java爬蟲(chóng)利器Jsoup

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

Jsoup的概述

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

Jsoup的特點(diǎn)

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

Jsoup的優(yōu)點(diǎn)

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

Jsoup的核心類

以下是Jsoup中最重要的幾個(gè)核心類:

  • Document:代表整個(gè)HTML或XML文檔。可以通過(guò)該類來(lái)獲取所需的元素、屬性等。
  • Element:代表HTML中的一個(gè)元素。例如, ,

    等。

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

Jsoup的用法

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

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

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

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

2.解析HTML文檔

解析HTML的第一步是將HTML文檔加載到Jsoup的Document對(duì)象中,以便進(jìn)行后續(xù)操作。可以通過(guò)以下方式實(shí)現(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對(duì)象,而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對(duì)象。

4.使用選擇器查找元素

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

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

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

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

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

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

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中的正文

有時(shí)候我們只需要解析HTML中的正文部分而不是全文,這種情況下可以使用Jsoup提供的方法實(shí)現(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í)用法

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

1.從HTML中提取圖片

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

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

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

2.從HTML中提取所有鏈接

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

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

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

3.自定義User-Agent和超時(shí)時(shí)間

可以通過(guò)以下方式指定Jsoup連接的User-Agent和超時(shí)時(shí)間:

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è)置超時(shí)時(shí)間,單位是毫秒。

4.處理HTML中的中文編碼問(wèn)題

當(dāng)解析包含中文字符的HTML文檔時(shí),可能會(huì)出現(xiàn)亂碼等問(wèn)題。可以通過(guò)以下方式解決:

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

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

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();
    }
}

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

6.處理HTML中的特殊字符

有些HTML文檔中包含特殊字符,例如©、™等符號(hào),這些符號(hào)可能會(huì)導(dǎo)致解析錯(cuò)誤??梢允褂靡韵路绞浇鉀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)站可能會(huì)禁止爬蟲(chóng)訪問(wèn),可以使用代理服務(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ù)器的地址和端口號(hào)。

8.處理HTML中的連接

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

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()方法可以將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑,從而能夠正確地訪問(wè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中的圖片

有時(shí)候我們需要將HTML中的圖片下載到本地使用??梢允褂靡韵麓a實(shí)現(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è)置請(qǐng)求的最大字節(jié)數(shù)。然后可以將結(jié)果寫(xiě)入文件或者流中,以保存圖片內(nèi)容。

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

相關(guān)文章

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

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

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

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

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

    Java AES256加密解密示例代碼

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

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

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)?lái)一篇利用HttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • SpringBoot+SpringCloud用戶信息微服務(wù)傳遞實(shí)現(xiàn)解析

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

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

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

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

最新評(píng)論

盐亭县| 万荣县| 苏尼特左旗| 大埔区| 临邑县| 兴山县| 黎平县| 恩施市| 安徽省| 玛多县| 巴彦县| 澎湖县| 花莲县| 海丰县| 大城县| 五莲县| 申扎县| 兴和县| 安庆市| 岳阳县| 大悟县| 商水县| 宁化县| 玉林市| 姜堰市| 台北市| 襄城县| 大城县| 梧州市| 义马市| 靖宇县| 安多县| 北川| 石柱| 青浦区| 方城县| 二连浩特市| 肥东县| 定襄县| 图片| 九龙县|