【问题标题】:Groovy htmlunit getFirstByXPath returning null + OCR QuestionGroovy htmlunit getFirstByXPath 返回 null + OCR 问题
【发布时间】:2011-01-12 04:20:50
【问题描述】:

我最近遇到了一些关于 HtmlUnit 返回空值的问题,我正在寻求指导。我抓取网站第一行的每个结果都返回 null。我想知道是否有人可以

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() 显然在 null 上不起作用。

我还有关于 PORT 是图像应该怎么做的问题?有没有比下载它并尝试通过 OCR 解决它更好的选择?

旁注

这个站点没有任何意义,我只是在寻找一个我可以练习抓取的站点(最后一个我遇到了片段身份问题并且无法得到答案:HtmlUnit getByXpath returns null 和 @987654322 @)

【问题讨论】:

    标签: html groovy screen-scraping htmlunit


    【解决方案1】:

    您的 xpath 查询似乎不正确。根据代码示例中提供的 url,应从搜索路径中删除表单元素。

    这是一个 xpath 查询,当页面布局发生变化时,它不太容易中断。

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

    就端口号而言,该页面的作者一定希望该部分数据不因某种原因而被抓取。进行 OCR 可能是您的最佳选择。

    但是,您可以做的一件事是查看返回的图像大小以猜测端口号。例如,我注意到显示端口 80 的图像都具有 406 或 411 的内容长度。端口 8080 是 402 或 409。图像有两种不同的大小可以与行颜色混合。如果 Url 以 1 结尾,它将有一个白色的背景,如果它以 0 结尾,它将有一个浅灰色的背景,并且总是大几个字节。这种方法有明显的缺点,但它可能会奏效。

    【讨论】:

    • 我使用 firebug 来获取包含表单的 XPath(我认为它是正确的)。但是,即使从 XPath 中删除 form 也会返回 null。
    • 感谢 Aaron 的回复,这让我重新检查了我现在已更改为的 XPath:/html/body//table/tbody/tr/td[2] 这似乎为我提供了该值的正确信息。那部分已经解决(现在),所以剩下的就是我的其他问题
    • @StartingGroovy - 我更新了一个更好的 XPath 查询,并为您关于端口号是图像的问题添加了答案。
    • 感谢您的回答,非常感谢:)
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2010-12-28
    • 2012-11-14
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多