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庫加載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查詢元素 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)]
- *: 這個(gè)符號將匹配所有元素
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è)同級元素B,比如:div.head + div
- siblingA ~ siblingX: 查找A元素之前的同級X元素,比如:h2 ~ p
- el, el, el:多個(gè)選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo
偽選擇器selectors
- :lt(n): 查找哪些元素的同級索引值(它的位置在DOM樹中是相對于它的父節(jié)點(diǎn))小于n,比如:td:lt(3) 表示小于三列的元素
- :gt(n):查找哪些元素的同級索引值大于n,比如: div p:gt(2)表示哪些div中有包含2個(gè)以上的p元素
- :eq(n): 查找哪些元素的同級索引值與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類功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java 網(wǎng)絡(luò)編程socket編程等詳解
本篇文章主要介紹了java網(wǎng)絡(luò)編程中的類的方法以及實(shí)例,需要的朋友可以參考下2017-04-04
java常用數(shù)據(jù)流應(yīng)用實(shí)例解析
這篇文章主要介紹了java常用數(shù)據(jù)流應(yīng)用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
SpringBoot實(shí)現(xiàn)動態(tài)定時(shí)任務(wù)的示例代碼
在SpringBoot項(xiàng)目中簡單使用定時(shí)任務(wù),不過由于要借助cron表達(dá)式且都提前定義好放在配置文件里,不能在項(xiàng)目運(yùn)行中動態(tài)修改任務(wù)執(zhí)行時(shí)間,實(shí)在不太靈活。現(xiàn)在我們就來實(shí)現(xiàn)可以動態(tài)修改cron表達(dá)式的定時(shí)任務(wù),感興趣的可以了解一下2022-10-10
深入分析RabbitMQ中死信隊(duì)列與死信交換機(jī)
這篇文章主要介紹了RabbitMQ中死信隊(duì)列與死信交換機(jī),死信隊(duì)列就是一個(gè)普通的交換機(jī),有些隊(duì)列的消息成為死信后,一般情況下會被RabbitMQ清理,感興趣想要詳細(xì)了解可以參考下文2023-05-05
Springboot通過配置WebMvcConfig處理Cors非同源訪問跨域問題
這篇文章主要介紹了Springboot通過配置WebMvcConfig處理Cors非同源訪問跨域問題,關(guān)于Cors跨域的問題,前端有代理和jsonp的常用方式解決這種非同源的訪問拒絕策略2023-04-04
Java通過正則表達(dá)式獲取字符串中數(shù)字的方法示例
最近工作中遇到了一個(gè)需求,需要利用java獲取字符串中的數(shù)字,嘗試幾種方法后發(fā)現(xiàn)利用正則表達(dá)式實(shí)現(xiàn)最為方法,下面這篇文章就主要介紹了Java通過正則表達(dá)式獲取字符串中數(shù)字的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下。2017-03-03

