2011-01-08 84 views
1

最近我有一些HtmlUnit返回空值的問題,並且正在尋找指導。我抓取網站第一行的每個結果都返回null。我想知道,如果有人可以Groovy htmlunit getFirstByXPath返回null + OCR問題

A)解釋爲什麼他們可能會返回null

B)解釋更好的方式(如果有一些)去獲得信息

這裏我當前的代碼(網址是源):

client = new WebClient(BrowserVersion.FIREFOX_3) 
client.javaScriptEnabled = false 

def url = "http://www.hidemyass.com/proxy-list/" 

page = client.getPage(url) 

IpAddress = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[2]").getValue() 
println "IP Address is: $data"   //returns null 

//Port_Number is an Image 

Country = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[4][@class='country']/@rel").getValue() 
println "Country abbreviation is: $Country" 

//differentiate speed and connection by name of gif? 

Type = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[7]").getValue() 
println "Proxy type is: $Type" 

Anonymity = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[8]").getValue() 
println "Anonymity Level is: $Anonymity" 

client.closeAllWindows() 

現在我所有的XPath的返回null,.getValue()顯然不能對空工作。

我也有問題應該怎麼處理PORT因爲它是一個圖像?有沒有更好的選擇,比下載它,並試圖通過OCR解決它?

旁註

有在這個網站沒有任何意義,我只是在尋找,我可以練習刮(最後一個我跑進片段身份的問題,無法獲得網站答案爲:HtmlUnit getByXpath returns nullHtmlUnit and Fragment Identities

回答

1

看起來您的xpath查詢不正確。根據代碼示例中提供的url,應該從搜索路徑中刪除表單元素。

alt text

這裏是一個XPath查詢,這將是不易於破裂時的頁面的佈局改變。

//table[@id='proxylist-table']/tbody/tr/td[2] 

就端口號而言該頁面的作者一定希望那部分數據不會因爲某種原因被刮掉。做OCR可能是你最好的選擇。

但是,您可以做的一件事是查看返回的猜測端口號的圖像大小。例如,我注意到顯示端口80的圖像全都具有406或411的內容長度。端口8080是402或409.圖像有兩種不同的尺寸可與行顏色混合。如果Url以1結尾,如果它以0結尾,它將具有白色背景,它將具有淺灰色背景,並且總是大於幾個字節。這種方法有明顯的缺點,但它可能有效。

+0

我用螢火蟲讓我的XPaths包含窗體(我認爲它是正確的)。但是,即使從XPath中刪除* form *也會返回null。 – StartingGroovy 2011-01-08 19:08:46