0

我正在使用 HtmlUnit 2.10。我正在为网站创建一个小型链接验证器。对于爬行,我正在使用它。在我的研究期间,我试图爬行:loans.xxxxxxx.com。它有 58 个锚标签和 5 个链接标签。

我正在写这样的代码

    List<HtmlElement> elementsOfPage = (List<HtmlElement>) htmlPage.getElementsByTagName("link");
    Iterator<HtmlElement> it = elementsOfPage.iterator();
    System.out.println(elementsOfPage.size());
    while(it.hasNext()) {
        HtmlElement htmlElement = it.next();
        System.out.println(htmlElement.toString());
    }

我也对锚标记执行相同的程序,即对于链接,它只显示 3,而对于锚,它只显示 56,即使分别有 5 个和 58 个。

代码中有一些被注释的部分,我认为 Web 客户端会忽略它,但如果你实际打印它会显示一些结果实际上来自注释代码。

// 在运行 webclient 之前,我禁用了 applet、css、javascripts 并将超时时间增加到 7 秒。

为什么这种行为很奇怪?

4

1 回答 1

0

58 和 5 这样的数字是怎么得到的?我试图检查您使用 HtmlUnit 2.10 + JSoup 解析器提供的 URL。代码是(Groovy,但几乎是 Java):

def client = new WebClient(BrowserVersion.FIREFOX_3_6)
client.setThrowExceptionOnScriptError(false);
def page = (HtmlPage)client.getPage("http://loans.bankofamerica.com/en/index.html")
def doc = Jsoup.parse(page.asXml())
println doc.select("a").size()
println doc.select("link").size()

结果是 56 和 2。但使用默认 UserAgent

def client = new WebClient()

结果是 56 和 3!似乎服务器给出不同的标记取决于用户代理字符串(可能还有其他标头)。

于 2012-08-18T14:56:41.523 回答