【问题标题】:How to extract all links on a page using crawler4j?如何使用 crawler4j 提取页面上的所有链接?
【发布时间】:2023-03-25 08:58:01
【问题描述】:

我正在实现一个网络爬虫,我正在使用 Crawler4j 库。我没有得到网站上的所有链接。 我尝试使用 Crawler4j 提取一页上的所有链接,但错过了一些链接。

Crawler4j 版本:crawler4j-3.3

我使用的网址:http://testsite2012.site90.com/frontPage.html

没有。此页面上的链接数:其中近 60 个和 4-5 个在重复

没有。 crawler4j 给出的链接数:23

this 是页面上的 URL 列表,this 是 Crawler4j 给出的 URL 列表。

我查看了 crawler4j 使用的“HtmlContentHandler.java”文件来提取链接。在此仅提取与“src”和“href”链接相关的链接。

我发现这些文件之间的区别。 Crawler4j 缺少与“src”或“href”属性无关且位于“脚本”标签下的链接。 this 是 crawler4j 没有抓取的链接列表。

如何提取此页面上的所有链接? 我需要在 HTML 解析页面上进行字符串操作(如查找 'http' )还是应该更改 'HtmlContentHandler.java' 文件的代码?

哪种方法最好?

即使我进行字符串操作并提取此页面上的所有链接,但 Crawler4j 正在使用自己爬取的链接来爬取网站,并且在这种情况下它不会错过某些页面?

【问题讨论】:

标签: java html hyperlink web-crawler crawler4j


【解决方案1】:

尝试使用Regular Expressions 来定位链接。

您可以查看here 的示例。

【讨论】:

  • 我已经在使用正则表达式,并在'shouldVisit()'中使用正则表达式来控制要获取、解析的页面。它不控制在已获取的页面上提取哪种链接。我希望你明白我想说什么。你呢?
  • 我的意思是你使用 Reg Exp 来查找你需要的字符串(就像所有以'http://'开头的字符串一样)。查看我在“getStrWithPattern()”方法中链接的示例
  • 好的。但问题是我想抓取一个网站。如果网站主页上有 5 个链接,并且 crawler4j 提取 3 个(我将使用正则表达式提取剩余链接),那么 Crawler4j 将继续基于这 3 个链接而不是 5 个链接抓取网站. 在那种情况下它可能会错过一些页面。这种情况下该怎么办?
  • 我们可以在运行时将这两个链接添加到 crawler4j 的“toCrawl”列表中吗?如果是,如何?
  • 对不起,但我不明白是什么阻止您将这 2 个链接添加到列表中?清单不是在你的控制之下吗?不管你如何提取链接,一旦你有了它们,你就可以对它们做任何你想做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2011-02-01
  • 2014-03-17
相关资源
最近更新 更多