網頁解析之Jsoup

2021-06-26 19:29:44 字數 2605 閱讀 5546

jsoup功能非常強大,可以解析乙個完整的網頁,當然了,也可以解析乙個網頁的一部分,還可以解析乙個字串,文字。具體使用可以參考使用文件,這裡我主要講解如何解析乙個完整的網頁。

1.獲取網頁的資料

httpclient client = new defaulthttpclient();         //例項化乙個httpclient

httpget get = new httpget(htmlurl);       //例項化乙個httpget method

httpresponse response = client.execute(get);  //執行get

htmlstr = entityutils.tostring(response.getentity());  //獲得網頁資料 儲存成乙個string 方便列印檢視和後面的解析

2.開始對網頁資料進行解析 

jsoup將要解析的內容抽象成乙個document,可以理解為將乙個網頁在記憶體中的存放抽象成乙個document.

document doc = jsoup.parse(htmlstr);

通過jsoup的靜態方法,將輸入的string預先解析成乙個document物件。之後,對該網頁中所有的目標資料的查詢都在該document中進行。下面是原網頁的部分**,講解主要依次為依據。

class="login" align="center">

class="login">

class="bar_bg">使用者登入

其中要說道的已經標註了顏色。首先說一下基本概念。在上面的**中可以看到類似'

1)在jsoup中將需要解析的內容抽象成乙個document,在解析過程中查詢的任何乙個內容都抽象成element.document提供了如下幾個函式。

getelementbyid(string id)  //通過乙個id查詢元素。

getelementsbytag(string tag)  //通過乙個tag查詢元素

getelementsbyclass(string classname)  //通過乙個類名查詢元素

getelementsbyattribute(string key)  //通過乙個屬性查詢元素

這裡要說明,不好意思,我不知道id是個什麼東西。所以,就沒用,其實也沒用上,因為後面三個函式已經解決了所以我的問題。知道的給我講講,對html不是很了解。

getelementsbytag(string tag)  顧名思義,通過乙個tag段標記查詢元素,那什麼是

」就是乙個tag標記的內容。那麼這個tag的名字就叫"td",所以如果需要找這一行就是用doc.

getelementbyid("td");

同理,getelementbyclass(string classname)就表示通過乙個類名來尋找乙個元素,從上面很輕鬆看到乙個class對不對?---「

",那麼這個類名也就是login,當然了這個類的內容絕不是這一行,而是與之相對於的

之間所有的內容。也就是兩個紫色之間的內容代表乙個login類。如果解析就是用一下語句:getelementbyclass("

login

");

最後也就是getelementsbyattribute(string key)  //通過乙個屬性查詢元素了。什麼是屬性?如下:

在這句話中 action的屬性值就是"/modules/swyh/servlet/login"method的屬性值就是"post",那麼action 和 method就是form這個

tag的屬性。所以使用getelementsbyattribute() ,就可以解析到所有有aciton屬性的元素了。

對了,忘掉乙個細節,那就是這些函式返回的不是乙個element而是一系列的elements所以,我們需要哪個element還需要

使用get函式獲取我們需要的,通常的網頁不變化不大,搭配著使用上面的函式就可以獲取我們需要的element.

當然了也可以使用select方法進行暴力查詢,只要存在就沒有找不到的,document的elements.select(string selector)

找到包含我們需要的的element,一般最小的element單位都是乙個tag,實驗的時候好像是查詢的tag.也就是每一行的開頭。

當然了,select在element和elements中都是

可以使用的,因此可實現指定元素的過濾。非常給力。

element login = doc.getelementsbyclass("login").first();

htmlinfo.setvcv(login.select("input").first().attr("value"));

htmlinfo.setimgsrc(login.select("img").first().attr("src"));

以上**就是為了從上面的網頁資料中解析到login,然後從login中獲得input的value屬性的值。同時獲取login中的

img所在的端,獲取attr屬性的值。

最後乙個函式就是element.text()用於獲取乙個元素中的文字內容。比如:使用者登入

就可以獲得"使用者登入」內容。

好了今天就寫這麼多了。

Jsoup後台解析html jsp網頁

在一些網路爬蟲或者從第三方 抓取資訊的程式都面臨1個問題,如何從網頁中把所需的資訊提取出來,jsoup是個比較好的選擇,它能把 內容解析成document,再從document中取element就是個簡單的事了。這裡介紹1下jsoup的基本用法。public void parsestring pub...

Jsoup後台解析html jsp網頁

在一些網路爬蟲或者從第三方 抓取資訊的程式都面臨1個問題,如何從網頁中把所需的資訊提取出來,jsoup是個比較好的選擇,它能把 內容解析成document,再從document中取element就是個簡單的事了。這裡介紹1下jsoup的基本用法。public void parsestring pub...

jsoup解析網頁出現轉義符問題

給出了hack方案 document doc jsoup.connect 清空jsoup的轉義表,會使jsoup失去轉義能力 entities.escapemode.base.getmap clear elements elements doc.select textarea id photolis...