2016-08-12 145 views
1

目前我正在嘗試使用Java中的Jsoup庫來刮取靜態html頁面。我找到了一種方法來獲得我想要的東西,但我不確定要爲我的選擇器選擇什麼。之前,我使用的是CSS,但是我想要的文本位置對於每個html頁都不相同。如何使用Jsoup定位遵循特定網址的特定文本字段?

所以我想用這樣的邏輯,因爲該網頁的佈局方式是一個特定的URL後顯示的文字:

-Topic as a link- 

Text field containing information related to Topic. 

的HTML看起來像這樣

<A NAME="Topic"></A> <A HREF="#TOPIC LiNK"><H2> TITLE OF TOPIC </H2></A> 

<PRE><B leftmargin=150 marginwidth=100\>Content that I want to scrape</B></PRE> 

我想刮掉「我想刮的內容」中的所有內容。

+0

自從看了看前面的XPath? [文檔站點有一個標籤](http://stackoverflow.com/documentation/xpath),並且只是做你想要的(或者至少如果我正確地理解了它)。 – ppeterka

+1

問題是jsoup不支持XPath,或者至少不是我知道 – KrL

+0

對不起,我確信它確實... JSoup是一個硬性要求嗎?我前一段時間使用了NekoHTML,這似乎支持XPath ...我也推薦HtmlUnit - 但是這太重了,太慢了... – ppeterka

回答

2

根據你的例子,它看起來像你試圖從<PRE>得到<A>之後的文本。在這種情況下,您可以使用siblingA + siblingB,它將嘗試立即找到sibling B前面有sibling A(您可以在official tutorialSelector documentation找到有關選擇器和示例的更多信息)。

所以在你的情況下doc.select("a+pre").text()應該足夠了。

您可以添加更多的細節,如像a[href=#TOPIC LiNK] href屬性的具體網址,或條件<A href=...>也需要通過<A name=..>

doc.select("a[name] + a + pre") 
+0

@KrL歡迎您。歡迎接受此答案(更多信息:[「接受答案如何工作?」](http://meta.stackexchange.com/a/5235)) – Pshemo