Crawler4j vs. Jsoup 用于在 Java 中抓取和解析页面



我想获取页面的内容并提取其中的特定部分。据我所知,对于这样的任务,至少有两种解决方案:Crawler4j和Jsoup。

它们都能够检索页面的内容并提取页面的子部分。我唯一不确定的是,它们之间有什么区别?还有一个类似的问题,标记为已回答:

Crawler4j是一个爬虫,Jsoup是一个解析器。

但我刚刚检查了一下,Jsoup除了解析功能外,还能够抓取页面,而Crawler4j不仅能够抓取页面,还能够解析其内容。

Crawler4j和Jsoup有什么区别?

爬网不仅仅是检索单个 URI 的内容。如果您只想检索某些页面的内容,那么使用类似 Crawler4J .

让我们看一个例子。假设您要抓取网站。要求是:

  1. 提供基本 URI(主页)
  2. 从每个页面中获取所有 URI,并检索这些 URI 的内容。
  3. 为检索到的每个 URI 递归移动。
  4. 仅检索此网站内部的 URI 的内容(可能有外部 URI 引用另一个网站,我们不需要这些 URI)。
  5. 避免循环爬行。页面 A 具有页面 B(同一站点的)的 URI。页面 B 具有页面 A 的 URI,但我们已经检索了页面 A 的内容(About页面有指向Home页面的链接,但我们已经获得了Home页面的内容,所以不要再次访问它)。
  6. 爬网操作必须是多线程的
  7. 该网站很大。它包含很多页面。我们只想从页面开始检索 50 个 URI Home

这是一个简单的方案。尝试使用 Jsoup 解决此问题。所有这些功能都必须由您实现。Crawler4J或任何爬虫微框架,将或应该具有上述操作的实现。 Jsoup 的强大品质在你决定如何处理内容时闪耀。

让我们看一下解析的一些要求。

  1. 获取页面的所有段落
  2. 获取所有图像
  3. 移除无效标签(不符合HTML规范的标签)
  4. 删除脚本标记

这就是Jsoup发挥作用的地方。当然,这里也有一些重叠之处。有些事情在Crawler4JJsoup上都是可能的,但这并不能使它们等同。您可以删除从Jsoup中检索内容的机制,并且仍然是一个了不起的工具。如果Crawler4J删除检索,那么它将失去一半的功能。

我在现实生活中的同一个项目中使用了它们。我抓取了一个网站,利用Crawler4J的优势,解决了第一个示例中提到的所有问题。然后我把检索到的每个页面的内容传递给Jsoup,以便提取我需要的信息。我能不使用其中一个吗?是的,我可以,但我必须实现所有缺少的功能。

因此,区别在于,Crawler4J是一个爬虫,具有一些简单的解析操作(您可以在一行中提取图像),但没有实现复杂的CSS查询。 Jsoup是一个解析器,为您提供用于HTTP请求的简单 API。对于更复杂的任何内容,都没有实现。

相关内容

  • 没有找到相关文章

最新更新