【问题标题】:HTMLUnit collecting all links by class nameHTMLUnit 按类名收集所有链接
【发布时间】:2011-02-18 00:29:56
【问题描述】:

我想抓取/收集页面上特定类名下的所有链接

例如HTML 农业 (92)

<a href="http://www.specificurl/page.html" class="generate">Agriculture</a>

我一直在玩弄以下代码:

   List<?> links = page.getByXPath("//div[@class='generate']/@href");

   OR
 List<?> links = page.getAnchors();
    System.out.println(links);

getByXPath 选项返回 null,另一个选项获取所有锚点。有没有办法将链接抓取到列表中?

【问题讨论】:

  • 有没有办法从一个页面上刮掉所有的链接?我需要抓取产品,并相信先抓取所有产品 url,然后点击每个是最好的方法?

标签: hyperlink htmlunit scrape


【解决方案1】:

这是一个糟糕的 XPath,但我在缩小范围时遇到了问题。 (如有必要,我可以研究一个更好的 XPath,但现在这个可行:

List<?> links = page.getByXPath("/html/body/div[2]/div[2]/table/tbody/tr/td/table/tbody/tr[7]/td/table/tbody/tr/td/div/table/tbody/tr[2]/td/div/table/tbody/tr/td/table/tbody/tr/td/ul/li/a/@href").asList()

我不太清楚为什么它不允许我们通过那个类名来获取它。

当你有机会时告诉我它对你的作用

【讨论】:

  • URL 是wholesalepages.co.uk/ukwholesalers 想要所有类别链接。我可以使用 AnchorByText 并输入所有链接文本,但这不是很干净。我已经尝试过上面的 getByXPath 及其返回 null,我认为这意味着我的路径错误??我测试的内容: List> links = page.getByXPath("//div[@class='generate']/href"); List> links = page.getByXPath("//html/body/div[2]/div[2]/table/tbody/tr/td/table/tbody/tr[7]/td/table/tbody/ tr/td/div/table/tbody/tr[2]/td/div/table/tbody/tr/td/table/tbody/tr/td/ul/li/a[@class='generate']/href ");
  • @Doug Stewart 我已经使用有效的 XPath 更新了我的答案。 (我觉得 XPath 可能会更好,因为它应该能够被类抓住)
  • 抱歉耽搁了我离开。是的,这已经奏效了,太棒了,谢谢。我在最后删除了 .asList() ,因为我没有声明它。通常这会将结果放入列表中吗?目前我得到的结果如下:[DomAttr[name=href value=wholesalepages.co.uk/ukwholesalers/…,我只想要链接,因为下一步是滚动点击每个链接。
  • @Doug Stewart 尝试使用.asText()links.textContent。其中之一肯定可以工作,让我知道这是怎么回事。我更喜欢使用 Groovy 来完成这样的小任务。在 groovy 中,下一步很简单:links.each { //do task here }
  • 抱歉,我没有使用过 Groovy,老实说,我对 Java 还很陌生。我已经尝试过 .asText 和 textcontent 但作为它的 List> 它不会这样做,bugger :(
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 2018-05-06
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多