Crawler4j与Jsoup一起在Java

时间:2016-01-19 22:55:12

标签: java web-crawler html-parsing jsoup crawler4j

我想获取页面的内容并提取其中的特定部分。据我所知,此类任务至少有两种解决方案:Crawler4jJsoup

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

  

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

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

因此,请您澄清Crawler4j和Jsoup之间的区别吗?

1 个答案:

答案 0 :(得分:24)

抓取比仅检索单个URI的内容更重要。如果您只想检索某些页面的内容,那么使用Crawler4J之类的内容并没有什么好处。

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

  1. 提供基本URI(主页)
  2. 从每个页面获取所有URI并检索其中的内容。
  3. 为您检索的每个URI递归移动。
  4. 仅检索此网站内的URI的内容(可能有引用其他网站的外部URI,我们不需要那些)。
  5. 避免圆形爬行。页面A具有页面B(同一站点的)的URI。页面B包含页面A的URI,但我们已经检索到了页面A的内容(About页面有Home页面的链接,但我们已经获得了Home页面的内容所以不要再访问它了。
  6. 抓取操作必须是多线程的
  7. 网站很大。它包含很多页面。我们只想从Home页面开始检索50个URI。
  8. 这是一个简单的场景。尝试使用Jsoup解决此问题。所有这些功能必须由您实施。对于这个问题,Crawler4J或任何爬虫微框架将会或者应该具有上述操作的实现。当你决定如何处理内容时,Jsoup的强大品质就会大放异彩。

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

    1. 获取页面的所有段落
    2. 获取所有图片
    3. 删除无效标记(不符合HTML规范的标记)
    4. 删除脚本标记
    5. 这是Jsoup发挥作用的地方。当然,这里有一些重叠。 Crawler4JJsoup可能会有些内容,但这并不能使它们等效。您可以删除从Jsoup检索内容的机制,仍然是一个很棒的工具。如果Crawler4J将删除检索,那么它将失去一半的功能。

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

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