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

一、Jsoup的主要功能

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

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

二、Jsoup的主要類

1. org.jsoup.Jsoup類

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

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

2. org.jsoup.nodes.Document類

該類表示通過Jsoup庫加載HTML文檔。可以使用此類執行適用於整個HTML文檔的操作。

3. org.jsoup.nodes.Element類

HTML元素是由標簽名稱,屬性和子節點組成。 使用Element類,您可以提取數據,遍歷節點和操作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.解析文檔

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

4.使用選擇器獲取元素

selector選擇器概述

  • tagname:通過標簽查找元素,比如:span
  • #id:通過ID查找元素,比如:#myqxin
  • .class:通過class名稱查找元素,比如:class_a
  • [attribute]:利用屬性查找元素,比如:[abc]
  • [attr=value]:利用屬性值查詢元素,比如:[class=s_name]
  • ns|tag: 通過標簽在命名空間查找元素,比如:可以用 fb|name 語法來查找 fb:name 元素
  • [attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查找元素,比如:[href*=/path/]
  • [attr~=regex]: 利用屬性值匹配正則表達式來查找元素,比如: 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標簽下所有直接子元素
  • siblingA + siblingB: 查找在A元素之前第一個同級元素B,比如:div.head + div
  • siblingA ~ siblingX: 查找A元素之前的同級X元素,比如:h2 ~ p
  • el, el, el:多個選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo

偽選擇器selectors

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

5. 處理元素數據

  • attr(String key)獲取和attr(String key, String value)設置屬性
  • attributes() 獲得所有屬性
  • id()className()classNames()
  • text()獲取和text(String value)設置文本內容
  • html()獲取和html(String value)設置內部HTML內容
  • outerHtml() 獲取外部HTML值
  • data()獲取數據內容(例如scriptstyle標簽)
  • 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

在解析文檔並找到一些元素之後,您將需要獲取這些元素中的數據。

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

以上就是java爬蟲Jsoup主要類及功能使用詳解的詳細內容,更多關於java爬蟲Jsoup類功能的資料請關註WalkonNet其它相關文章!

推薦閱讀: