亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java第三方包學(xué)習(xí)之jsoup

dackel / 721人閱讀

摘要:下面隆重介紹簡(jiǎn)介是一個(gè)解析的第三方庫(kù),它提供了一套非常方便的,可使用,以及類(lèi)的操作方法來(lái)取出和操作數(shù)據(jù)。一個(gè)文檔的對(duì)象模型文檔由多個(gè)和組成其繼承結(jié)構(gòu)如下繼承繼承繼承一個(gè)包含一個(gè)子節(jié)點(diǎn)集合,并擁有一個(gè)父。

前言

使用python寫(xiě)爬蟲(chóng)的人,應(yīng)該都聽(tīng)過(guò)beautifulsoup4這個(gè)包,用來(lái)它來(lái)解析網(wǎng)頁(yè)甚是方便。那么在java里有沒(méi)有類(lèi)似的包呢?當(dāng)然有啦!而且也非常好用。下面隆重介紹jsoup!

簡(jiǎn)介

jsoup 是一個(gè)解析 HTML 的第三方 java 庫(kù),它提供了一套非常方便的 API,可使用 DOM,CSS 以及類(lèi) jQuery 的操作方法來(lái)取出和操作數(shù)據(jù)。

jsoup 實(shí)現(xiàn)了 WHATWG HTML5 規(guī)范,能夠與現(xiàn)代瀏覽器解析成相同的DOM。其解析器能夠盡最大可能從你提供的HTML文檔來(lái)創(chuàng)建一個(gè)干凈的解析結(jié)果,無(wú)論HTML的格式是否完整。比如它可以處理沒(méi)有關(guān)閉的標(biāo)簽。

舉個(gè)栗子:

Lorem

Ipsum parses to

Lorem

Ipsum

它也可以處理隱式標(biāo)簽,創(chuàng)建可靠的文檔結(jié)構(gòu)(html標(biāo)簽包含head 和 body,在head只出現(xiàn)恰當(dāng)?shù)脑兀?/p> 下載

官網(wǎng)地址在這里, 對(duì)應(yīng)的中文文檔在這里,以及 jar 包的下載地址。

一個(gè)文檔的對(duì)象模型

文檔由多個(gè)ElementsTextNodes組成 ;

其繼承結(jié)構(gòu)如下:Document繼承Element繼承Node, TextNode繼承 Node.

一個(gè)Element包含一個(gè)子節(jié)點(diǎn)集合,并擁有一個(gè)父Element。他們還提供了一個(gè)唯一的子元素過(guò)濾列表。

獲取 Document 對(duì)象

jsoup 可以從包括字符串、URL 地址以及本地文件來(lái)加載 HTML 文檔,并生成 Document 對(duì)象實(shí)例。

// (1)從字符串中獲取
String html = "First parse"
  + "

Parsed HTML into a doc.

"; Document doc1 = Jsoup.parse(html); // (2)從 URL 直接加載 HTML 文檔 // get方法 Document doc2 = Jsoup.connect("http://www.163.com").get(); // post方法 Document doc = Jsoup.connect("http://example.com") .data("query", "Java") .userAgent("Mozilla") .cookie("auth", "token") .timeout(3000) .post(); // (3)從文件中加載 HTML 文檔 File input = new File("D:/test.html"); Document doc = Jsoup.parse(input,"UTF-8","http://www.163.com/");

常用到的方法如下:

public static Connection connect(String url)
public static Document parse(String html, String baseUri)
public static Document parse(URL url,  int timeoutMillis) throws IOException
public static Document parse(File in,  String charsetName) throws IOException
public static Document parse(InputStream in, String charsetName,  String baseUrl)  throws IOException

parse方法能夠?qū)⑤斎氲?HTML 解析為一個(gè)新的文檔 (Document),只要解析的不是空字符串,就能返回一個(gè)結(jié)構(gòu)合理的文檔,其中包含(至少) 一個(gè)head和一個(gè)body元素。
上面的參數(shù) baseUri的作用是,如果要解析的html中存在相對(duì)路徑,那么就根據(jù)這個(gè)參數(shù)變成絕對(duì)路徑, 如果不需要可以傳入一個(gè)空字符串。

注:通過(guò)connect方法來(lái)獲得 html 源碼,有的時(shí)候會(huì)遇到亂碼的問(wèn)題,這個(gè)時(shí)候該怎么辦么?方法里有一個(gè) parse 方法,傳入?yún)?shù) InputStream、charsetName以及baseUrl,所有可以這樣解決:

String url = "http://xxxxxxx";
Document document = Jsoup.parse(new URL(url).openStream(), "GBK", url);// 以 gbk 編碼為栗。

Jsoup的強(qiáng)項(xiàng)是解析html,當(dāng)然了,它能處理一些簡(jiǎn)單情況,遇到復(fù)雜的情形還是使用 httpClient 這個(gè)包吧,你值得擁有!

解析并提取 HTML 元素 使用傳統(tǒng)的操作DOM的方式

舉個(gè)栗子

Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
Elements mx = content.getElementsByClass("help");

:doc 為 Document 對(duì)象。
還有寫(xiě)常用的方法,比如

public Elements getElementsByAttributeValue(String key,  String value)
public Element attr(String attributeKey,  String attributeValue)
public Elements getAllElements()
// 獲得孩子節(jié)點(diǎn)中所有的文本拼接
public String text()
// 獲得節(jié)點(diǎn)的內(nèi)部html
public String html() 

Document 對(duì)象還有一個(gè)方法

// 獲取標(biāo)題
public String title()
// 獲得某節(jié)點(diǎn)的html,這個(gè)方法繼承自Node類(lèi),所以Element類(lèi)也有該方法
public String outerHtml()
選擇器

在元素檢索方面,jsoup 的選擇器簡(jiǎn)直無(wú)所不能。
jsoup 選擇器很多,這里僅僅舉出幾個(gè)栗子,

Elements links = doc.select("a[href]"); // 具有href屬性的a標(biāo)簽
Elements pngs = doc.select("img[src$=.png]");// src屬性以.png結(jié)尾的img標(biāo)簽
Element masthead = doc.select("div.masthead").first();// class屬性為masthead的div標(biāo)簽中的第一個(gè)
Elements resultLinks = doc.select("h3.r > a"); // class屬性為r的h3標(biāo)簽的直接子a標(biāo)簽
Elements resultLinks = doc.select(img[src~=(?i).(png|jpe?g)])

Selector選擇器概述

tagname: 通過(guò)標(biāo)簽查找元素,比如:a
ns|tag: 通過(guò)標(biāo)簽在命名空間查找元素,比如:可以用 fb|name 語(yǔ)法來(lái)查找  元素
#id: 通過(guò)ID查找元素,比如:#logo
.class: 通過(guò)class名稱查找元素,比如:.masthead
[attribute]: 利用屬性查找元素,比如:[href]
[^attr]: 利用屬性名前綴來(lái)查找元素,比如:可以用[^data-] 來(lái)查找?guī)в蠬TML5 Dataset屬性的元素
[attr=value]: 利用屬性值來(lái)查找元素,比如:[width=500]
[attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開(kāi)頭、結(jié)尾或包含屬性值來(lái)查找元素,比如:[href*=/path/]
[attr~=regex]: 利用屬性值匹配正則表達(dá)式來(lái)查找元素,比如: 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元素,比如:h1 ~ p
el, el, el:多個(gè)選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo

偽選擇器selectors

:lt(n): 查找哪些元素的同級(jí)索引值(它的位置在DOM樹(shù)中是相對(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ū)分大不寫(xiě),比如: p:contains(jsoup)
:containsOwn(text): 查找直接包含給定文本的元素
:matches(regex): 查找哪些元素的文本匹配指定的正則表達(dá)式,比如:div:matches((?i)login)
:matchesOwn(regex): 查找自身包含文本匹配指定正則表達(dá)式的元素

注: 上述偽選擇器索引是從0開(kāi)始的,也就是說(shuō)第一個(gè)元素索引值為0,第二個(gè)元素index為1等。
對(duì)于 Elements 的來(lái)歷,看這里

public class Elements extends ArrayList

另外,可以查看Selector API參考來(lái)了解更詳細(xì)的內(nèi)容
可以看出,jsoup 使用跟 jQuery 一模一樣的選擇器對(duì)元素進(jìn)行檢索,以上的檢索方法如果換成是其他的 HTML 解釋器,至少都需要很多行代碼,而 jsoup 只需要一行代碼即可完成。

修改獲取數(shù)據(jù)
 // 為所有鏈接增加 rel=nofollow 屬性
doc.select("div.comments a").attr("rel", "nofollow"); 
 // 為所有鏈接增加 class=mylinkclass 屬性
doc.select("div.comments a").addClass("mylinkclass"); 
// 刪除所有圖片的 onclick 屬性
doc.select("img").removeAttr("onclick"); 
// 清空所有文本輸入框中的文本
doc.select("input[type=text]").val(""); 
// 獲得rel屬性的值
doc.select("div.comments a").attr("rel");
參考

使用 jsoup 對(duì) HTML 文檔進(jìn)行解析和操作

jsoup 1.9.2 API

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/66427.html

相關(guān)文章

  • java三方包學(xué)習(xí)之lombok

    摘要:不久前發(fā)現(xiàn)有一個(gè)第三方庫(kù)可以在一定程度上幫助我們從體力勞動(dòng)中解救出來(lái),它就是。來(lái)看自動(dòng)生成的方法中對(duì)于數(shù)組采用的是。檢查傳入對(duì)象是否為,若為,則拋出異常。比如自動(dòng)拋受檢異常,而無(wú)需顯式在方法上使用語(yǔ)句。 前言 Laziness is a virtue!每當(dāng)寫(xiě)pojo類(lèi)時(shí),都會(huì)重復(fù)寫(xiě)一些setter/getter/toString方法等大量的模版代碼,無(wú)聊繁瑣卻又不得不做,這會(huì)讓這個(gè)類(lèi)變...

    GitCafe 評(píng)論0 收藏0
  • Java爬蟲(chóng)之下載全世界國(guó)家的國(guó)旗圖片

    摘要:介紹本篇博客將繼續(xù)上一篇博客爬蟲(chóng)之使用的模塊爬取各國(guó)國(guó)旗的內(nèi)容,將用來(lái)實(shí)現(xiàn)這個(gè)爬蟲(chóng),下載全世界國(guó)家的國(guó)旗圖片。 介紹 ??本篇博客將繼續(xù)上一篇博客:Python爬蟲(chóng)之使用Fiddler+Postman+Python的requests模塊爬取各國(guó)國(guó)旗 的內(nèi)容,將用Java來(lái)實(shí)現(xiàn)這個(gè)爬蟲(chóng),下載全世界國(guó)家的國(guó)旗圖片。項(xiàng)目不再過(guò)多介紹,具體可以參考上一篇博客。??我們將全世界國(guó)家的名稱放在一個(gè)...

    YancyYe 評(píng)論0 收藏0
  • Java爬蟲(chóng)之利用Jsoup自制簡(jiǎn)單的搜索引擎

    摘要:的官方網(wǎng)址為,其使用手冊(cè)網(wǎng)址為本次分享將實(shí)現(xiàn)的功能為利用爬取某個(gè)搜索詞語(yǔ)暫僅限英文的百度百科的介紹部分,具體的功能介紹可以參考博客爬蟲(chóng)自制簡(jiǎn)單的搜索引擎。 ??Jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過(guò)DOM,CSS以及類(lèi)似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)。Jsoup的官方網(wǎng)址為: https:...

    GHOST_349178 評(píng)論0 收藏0
  • Java爬蟲(chóng):Jsoup + Phantomjs

    摘要:一是一個(gè)開(kāi)源解析器,可直接解析某個(gè)地址文本內(nèi)容。通過(guò)或選擇器來(lái)查找取出數(shù)據(jù),實(shí)現(xiàn)爬蟲(chóng)。無(wú)頭瀏覽器一個(gè)完整的瀏覽器內(nèi)核包括解析引擎渲染引擎請(qǐng)求處理等但是不包括顯示和用戶交互頁(yè)面的瀏覽器。 (一)Jsoup Jsoup是一個(gè)Java開(kāi)源HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。通過(guò)Dom或Css選擇器來(lái)查找、取出數(shù)據(jù),實(shí)現(xiàn)爬蟲(chóng)。 maven坐標(biāo) or...

    songze 評(píng)論0 收藏0
  • Java爬蟲(chóng):Jsoup + Phantomjs

    摘要:一是一個(gè)開(kāi)源解析器,可直接解析某個(gè)地址文本內(nèi)容。通過(guò)或選擇器來(lái)查找取出數(shù)據(jù),實(shí)現(xiàn)爬蟲(chóng)。無(wú)頭瀏覽器一個(gè)完整的瀏覽器內(nèi)核包括解析引擎渲染引擎請(qǐng)求處理等但是不包括顯示和用戶交互頁(yè)面的瀏覽器。 (一)Jsoup Jsoup是一個(gè)Java開(kāi)源HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。通過(guò)Dom或Css選擇器來(lái)查找、取出數(shù)據(jù),實(shí)現(xiàn)爬蟲(chóng)。 maven坐標(biāo) or...

    fai1017 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<