国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java第三方包學習之jsoup

dackel / 608人閱讀

摘要:下面隆重介紹簡介是一個解析的第三方庫,它提供了一套非常方便的,可使用,以及類的操作方法來取出和操作數據。一個文檔的對象模型文檔由多個和組成其繼承結構如下繼承繼承繼承一個包含一個子節點集合,并擁有一個父。

前言

使用python寫爬蟲的人,應該都聽過beautifulsoup4這個包,用來它來解析網頁甚是方便。那么在java里有沒有類似的包呢?當然有啦!而且也非常好用。下面隆重介紹jsoup

簡介

jsoup 是一個解析 HTML 的第三方 java 庫,它提供了一套非常方便的 API,可使用 DOM,CSS 以及類 jQuery 的操作方法來取出和操作數據。

jsoup 實現了 WHATWG HTML5 規范,能夠與現代瀏覽器解析成相同的DOM。其解析器能夠盡最大可能從你提供的HTML文檔來創建一個干凈的解析結果,無論HTML的格式是否完整。比如它可以處理沒有關閉的標簽。

舉個栗子:

Lorem

Ipsum parses to

Lorem

Ipsum

它也可以處理隱式標簽,創建可靠的文檔結構(html標簽包含head 和 body,在head只出現恰當的元素)。

下載

官網地址在這里, 對應的中文文檔在這里,以及 jar 包的下載地址。

一個文檔的對象模型

文檔由多個ElementsTextNodes組成 ;

其繼承結構如下:Document繼承Element繼承Node, TextNode繼承 Node.

一個Element包含一個子節點集合,并擁有一個父Element。他們還提供了一個唯一的子元素過濾列表。

獲取 Document 對象

jsoup 可以從包括字符串、URL 地址以及本地文件來加載 HTML 文檔,并生成 Document 對象實例。

// (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方法能夠將輸入的 HTML 解析為一個新的文檔 (Document),只要解析的不是空字符串,就能返回一個結構合理的文檔,其中包含(至少) 一個head和一個body元素。
上面的參數 baseUri的作用是,如果要解析的html中存在相對路徑,那么就根據這個參數變成絕對路徑, 如果不需要可以傳入一個空字符串。

注:通過connect方法來獲得 html 源碼,有的時候會遇到亂碼的問題,這個時候該怎么辦么?方法里有一個 parse 方法,傳入參數 InputStreamcharsetName以及baseUrl,所有可以這樣解決:

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

Jsoup的強項是解析html,當然了,它能處理一些簡單情況,遇到復雜的情形還是使用 httpClient 這個包吧,你值得擁有!

解析并提取 HTML 元素 使用傳統的操作DOM的方式

舉個栗子

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

:doc 為 Document 對象。
還有寫常用的方法,比如

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

Document 對象還有一個方法

// 獲取標題
public String title()
// 獲得某節點的html,這個方法繼承自Node類,所以Element類也有該方法
public String outerHtml()
選擇器

在元素檢索方面,jsoup 的選擇器簡直無所不能。
jsoup 選擇器很多,這里僅僅舉出幾個栗子,

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

Selector選擇器概述

tagname: 通過標簽查找元素,比如:a
ns|tag: 通過標簽在命名空間查找元素,比如:可以用 fb|name 語法來查找  元素
#id: 通過ID查找元素,比如:#logo
.class: 通過class名稱查找元素,比如:.masthead
[attribute]: 利用屬性查找元素,比如:[href]
[^attr]: 利用屬性名前綴來查找元素,比如:可以用[^data-] 來查找帶有HTML5 Dataset屬性的元素
[attr=value]: 利用屬性值來查找元素,比如:[width=500]
[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元素,比如:h1 ~ 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開始的,也就是說第一個元素索引值為0,第二個元素index為1等。
對于 Elements 的來歷,看這里

public class Elements extends ArrayList

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

修改獲取數據
 // 為所有鏈接增加 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 對 HTML 文檔進行解析和操作

jsoup 1.9.2 API

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66427.html

相關文章

  • java三方包學習之lombok

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

    GitCafe 評論0 收藏0
  • Java爬蟲之下載全世界國家的國旗圖片

    摘要:介紹本篇博客將繼續上一篇博客爬蟲之使用的模塊爬取各國國旗的內容,將用來實現這個爬蟲,下載全世界國家的國旗圖片。 介紹 ??本篇博客將繼續上一篇博客:Python爬蟲之使用Fiddler+Postman+Python的requests模塊爬取各國國旗 的內容,將用Java來實現這個爬蟲,下載全世界國家的國旗圖片。項目不再過多介紹,具體可以參考上一篇博客。??我們將全世界國家的名稱放在一個...

    YancyYe 評論0 收藏0
  • Java爬蟲之利用Jsoup自制簡單的搜索引擎

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

    GHOST_349178 評論0 收藏0
  • Java爬蟲:Jsoup + Phantomjs

    摘要:一是一個開源解析器,可直接解析某個地址文本內容。通過或選擇器來查找取出數據,實現爬蟲。無頭瀏覽器一個完整的瀏覽器內核包括解析引擎渲染引擎請求處理等但是不包括顯示和用戶交互頁面的瀏覽器。 (一)Jsoup Jsoup是一個Java開源HTML解析器,可直接解析某個URL地址、HTML文本內容。通過Dom或Css選擇器來查找、取出數據,實現爬蟲。 maven坐標 or...

    songze 評論0 收藏0
  • Java爬蟲:Jsoup + Phantomjs

    摘要:一是一個開源解析器,可直接解析某個地址文本內容。通過或選擇器來查找取出數據,實現爬蟲。無頭瀏覽器一個完整的瀏覽器內核包括解析引擎渲染引擎請求處理等但是不包括顯示和用戶交互頁面的瀏覽器。 (一)Jsoup Jsoup是一個Java開源HTML解析器,可直接解析某個URL地址、HTML文本內容。通過Dom或Css選擇器來查找、取出數據,實現爬蟲。 maven坐標 or...

    fai1017 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<