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...