java爬蟲Jsoup主要類及功能使用詳解
一、Jsoup的主要功能
Jsoup是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)。
- 從一個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庫加載HTML文檔??梢允褂么祟悎?zhí)行適用于整個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查詢元素 getElementById
- 根據(jù)標(biāo)簽獲取元素 getElementsByTag
- 根據(jù)class獲取元素 getElementsByClass
- 根據(jù)屬性獲取元素 getElementsByAttribute
// 解析文件,獲取doc對象
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
// 1,根據(jù)id查詢元素 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]:利用屬性值查詢元素,比如:[class=s_name]
- ns|tag: 通過標(biāo)簽在命名空間查找元素,比如:可以用 fb|name 語法來查找 fb:name 元素
- [attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結(jié)尾或包含屬性值來查找元素,比如:[href*=/path/]
- [attr~=regex]: 利用屬性值匹配正則表達(dá)式來查找元素,比如: img[src~=(?i).(png|jpe?g)]
- *: 這個符號將匹配所有元素
Selector選擇器組合使用
- el#id: 元素+ID,比如: div#logo
- el.class: 元素+class,比如: div.masthead
- el[attr]: 元素+class,比如: a[href]
- 任意組合,比如:a[href].highlight
- ancestor child: 查找某個元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素
- parent > child: 查找某個父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body標(biāo)簽下所有直接子元素
- siblingA + siblingB: 查找在A元素之前第一個同級元素B,比如:div.head + div
- siblingA ~ siblingX: 查找A元素之前的同級X元素,比如:h2 ~ p
- el, el, el:多個選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo
偽選擇器selectors
- :lt(n): 查找哪些元素的同級索引值(它的位置在DOM樹中是相對于它的父節(jié)點(diǎn))小于n,比如:td:lt(3) 表示小于三列的元素
- :gt(n):查找哪些元素的同級索引值大于n,比如: div p:gt(2)表示哪些div中有包含2個以上的p元素
- :eq(n): 查找哪些元素的同級索引值與n相等,比如:form input:eq(1)表示包含一個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. 處理元素數(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)容(例如script和style標(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類功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于Long和Integer相互轉(zhuǎn)換方式
這篇文章主要介紹了關(guān)于Long和Integer相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法
這篇文章主要介紹了Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
解析Orika的MapperFacade 屬性賦值的使用問題
在我們實(shí)際開發(fā)中,常常會有對象與對象之間的轉(zhuǎn)化,或者把一個對象的數(shù)據(jù)轉(zhuǎn)化到另一個數(shù)據(jù)之中,如果我們手動的一個一個的set就會比較麻煩,代碼段看起來也會比較長。而Orika的MapperFacade就是解決這個問題的,實(shí)現(xiàn)對象屬性的復(fù)制2021-12-12

