java爬蟲Jsoup主要類及功能使用詳解
一、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)容(例如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類功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于Long和Integer相互轉(zhuǎn)換方式
這篇文章主要介紹了關(guān)于Long和Integer相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法
這篇文章主要介紹了Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02解析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