欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java爬蟲Jsoup主要類及功能使用詳解

 更新時(shí)間:2022年12月11日 11:54:31   作者:刨紅薯的小羊竿爾  
這篇文章主要為大家介紹了java爬蟲Jsoup主要類及功能使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、Jsoup的主要功能

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

  • 從一個(gè)URL,文件或字符串中解析HTML
  • 使用DOM或CSS選擇器來查找、取出數(shù)據(jù)
  • 可操作HTML元素、屬性、文本
  • 根據(jù)安全的白名單清理用戶提交的內(nèi)容,以防止XSS攻擊
  • 輸出整潔的HTML

二、Jsoup的主要類

1. org.jsoup.Jsoup類

Jsoup類是任何Jsoup程序的入口點(diǎn),并將提供從各種來源加載和解析HTML文檔的方法。

static Connection connect(String url)創(chuàng)建并返回URL的連接。
static Document parse(File in, String charsetName)將指定的字符集文件解析成文檔。
static Document parse(String html)將給定的html代碼解析成文檔。
static String clean(String bodyHtml, Whitelist whitelist)從輸入HTML返回安全的HTML,通過解析輸入HTML并通過允許的標(biāo)簽和屬性的白名單進(jìn)行過濾。

2. org.jsoup.nodes.Document類

該類表示通過Jsoup庫(kù)加載HTML文檔??梢允褂么祟悎?zhí)行適用于整個(gè)HTML文檔的操作。

3. org.jsoup.nodes.Element類

HTML元素是由標(biāo)簽名稱,屬性和子節(jié)點(diǎn)組成。 使用Element類,您可以提取數(shù)據(jù),遍歷節(jié)點(diǎn)和操作HTML。

三、Jsoup使用

1.maven引入

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

2.加載文檔

Document document = Jsoup.connect("http://www.yiibai.com").get();
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );```
String html = "<html><head><title>First</title></head><body><p>Parsed</p></body></html>";
Document document = Jsoup.parse(html);

3.解析文檔

  • 根據(jù)id查詢?cè)?getElementById
  • 根據(jù)標(biāo)簽獲取元素 getElementsByTag
  • 根據(jù)class獲取元素 getElementsByClass
  • 根據(jù)屬性獲取元素 getElementsByAttribute
// 解析文件,獲取doc對(duì)象 
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8"); 
// 1,根據(jù)id查詢?cè)?getElementById 
Element element1 = doc.getElementById("people"); 
// 2,根據(jù)標(biāo)簽獲取元素 getElementsByTag 
Element element2 = doc.getElementsByTag("span").first(); 
// 3,根據(jù)class獲取元素 getElementsByClass 
Element element3 = doc.getElementsByClass("").first(); 
// 4,根據(jù)屬性獲取元素 getElementsByAttribute 
Element element4 = doc.getElementsByAttribute("").last(); 
// 根據(jù)屬性和屬性值獲取 Element element5 = doc.getElementsByAttributeValue("abc","123").last();

4.使用選擇器獲取元素

selector選擇器概述

  • tagname:通過標(biāo)簽查找元素,比如:span
  • #id:通過ID查找元素,比如:#myqxin
  • .class:通過class名稱查找元素,比如:class_a
  • [attribute]:利用屬性查找元素,比如:[abc]
  • [attr=value]:利用屬性值查詢?cè)兀热纾篬class=s_name]
  • ns|tag: 通過標(biāo)簽在命名空間查找元素,比如:可以用 fb|name 語(yǔ)法來查找 fb:name 元素
  • [attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結(jié)尾或包含屬性值來查找元素,比如:[href*=/path/]
  • [attr~=regex]: 利用屬性值匹配正則表達(dá)式來查找元素,比如: img[src~=(?i).(png|jpe?g)]
  • *: 這個(gè)符號(hào)將匹配所有元素

Selector選擇器組合使用

  • el#id: 元素+ID,比如: div#logo
  • el.class: 元素+class,比如: div.masthead
  • el[attr]: 元素+class,比如: a[href]
  • 任意組合,比如:a[href].highlight
  • ancestor child: 查找某個(gè)元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素
  • parent > child: 查找某個(gè)父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body標(biāo)簽下所有直接子元素
  • siblingA + siblingB: 查找在A元素之前第一個(gè)同級(jí)元素B,比如:div.head + div
  • siblingA ~ siblingX: 查找A元素之前的同級(jí)X元素,比如:h2 ~ p
  • el, el, el:多個(gè)選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo

偽選擇器selectors

  • :lt(n): 查找哪些元素的同級(jí)索引值(它的位置在DOM樹中是相對(duì)于它的父節(jié)點(diǎn))小于n,比如:td:lt(3) 表示小于三列的元素
  • :gt(n):查找哪些元素的同級(jí)索引值大于n,比如: div p:gt(2)表示哪些div中有包含2個(gè)以上的p元素
  • :eq(n): 查找哪些元素的同級(jí)索引值與n相等,比如:form input:eq(1)表示包含一個(gè)input標(biāo)簽的Form元素
  • :has(seletor): 查找匹配選擇器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
  • :not(selector): 查找與選擇器不匹配的元素,比如: div:not(.logo) 表示不包含 class="logo" 元素的所有 div 列表
  • :contains(text): 查找包含給定文本的元素,搜索不區(qū)分大不寫,比如: p:contains(jsoup)
  • :containsOwn(text): 查找直接包含給定文本的元素
  • :matches(regex): 查找哪些元素的文本匹配指定的正則表達(dá)式,比如:div:matches((?i)login)
  • :matchesOwn(regex): 查找自身包含文本匹配指定正則表達(dá)式的元素
  • 注意:上述偽選擇器索引是從0開始的

5. 處理元素?cái)?shù)據(jù)

  • attr(String key)獲取和attr(String key, String value)設(shè)置屬性
  • attributes() 獲得所有屬性
  • id(),className()classNames()
  • text()獲取和text(String value)設(shè)置文本內(nèi)容
  • html()獲取和html(String value)設(shè)置內(nèi)部HTML內(nèi)容
  • outerHtml() 獲取外部HTML值
  • data()獲取數(shù)據(jù)內(nèi)容(例如scriptstyle標(biāo)簽)
  • tag()tagName()

6.操縱HTML和文本

  • append(String html), prepend(String html)
  • appendText(String text)prependText(String text)
  • appendElement(String tagName), prependElement(String tagName)
  • html(String value)

7.從元素中提取屬性,文本和HTML

在解析文檔并找到一些元素之后,您將需要獲取這些元素中的數(shù)據(jù)。

  • Element.id()
  • Element.tagName()
  • Element.className()Element.hasClass(String className)

以上就是java爬蟲Jsoup主要類及功能使用詳解的詳細(xì)內(nèi)容,更多關(guān)于java爬蟲Jsoup類功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring中的循環(huán)依賴詳解

    Spring中的循環(huán)依賴詳解

    這篇文章主要介紹了Spring中的循環(huán)依賴詳解,  Spring 框架是一個(gè)流行的Java應(yīng)用程序框架,它提供了許多強(qiáng)大的功能,如依賴注入和面向切面編程,然而在使用 Spring 框架時(shí),我們可能會(huì)遇到循環(huán)依賴的問題,需要的朋友可以參考下
    2023-09-09
  • MyBatis中的自定義TypeHandler詳解

    MyBatis中的自定義TypeHandler詳解

    這篇文章主要介紹了MyBatis中的自定義TypeHandler詳解,定義的?typeHandler?泛型為?String,顯然我們要把數(shù)據(jù)庫(kù)的數(shù)據(jù)類型轉(zhuǎn)化為?String?型,然后實(shí)現(xiàn)設(shè)置參數(shù)和獲取結(jié)果集的方法,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于Long和Integer相互轉(zhuǎn)換方式

    關(guān)于Long和Integer相互轉(zhuǎn)換方式

    這篇文章主要介紹了關(guān)于Long和Integer相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java中特殊運(yùn)算符及其應(yīng)用詳解

    Java中特殊運(yùn)算符及其應(yīng)用詳解

    當(dāng)涉及位操作和位級(jí)運(yùn)算時(shí),Java?提供了一組特殊的運(yùn)算符,即左移(<<)和右移(>>)運(yùn)算符,下面小編就帶大家深入了解一下它們的具體應(yīng)用吧
    2023-08-08
  • Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法

    Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法

    這篇文章主要介紹了Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring整合Junit的使用詳解

    Spring整合Junit的使用詳解

    這篇文章主要介紹了Spring整合Junit的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • java使用pdfbox操作pdf文件示例

    java使用pdfbox操作pdf文件示例

    有時(shí)候PDF中的文字無法復(fù)制,這可能是因?yàn)镻DF文件加密了,不過使用PDFBox開源軟件就可以把它讀出來,下面是使用示例
    2014-03-03
  • 解析Orika的MapperFacade 屬性賦值的使用問題

    解析Orika的MapperFacade 屬性賦值的使用問題

    在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制
    2021-12-12
  • Java用鄰接表存儲(chǔ)圖的示例代碼

    Java用鄰接表存儲(chǔ)圖的示例代碼

    鄰接表是圖的一種鏈?zhǔn)酱鎯?chǔ)方法,其數(shù)據(jù)結(jié)構(gòu)包括兩部分:節(jié)點(diǎn)和鄰接點(diǎn)。本文將用鄰接表實(shí)現(xiàn)存儲(chǔ)圖,感興趣的小伙伴可以了解一下
    2022-06-06
  • java 中Thread.join()的使用方法

    java 中Thread.join()的使用方法

    這篇文章主要介紹了java 中Thread.join()的使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論