Crawler4j与Jsoup一起用于Java中的页面爬行和解析

Mik*_* B. 9 java web-crawler html-parsing jsoup crawler4j

我想获取页面的内容并提取其中的特定部分.据我所知,至少有两种解决方案可以完成这样的任务:Crawler4jJsoup.

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

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

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

那么,请你澄清Crawler4j和Jsoup之间的区别吗?

Alk*_*ris 25

爬行比仅检索单个URI的内容更重要.如果您只想检索某些页面的内容,那么使用类似的东西并没有真正的好处Crawler4J.

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

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

这是一个简单的场景.尝试解决这个问题Jsoup.所有这些功能必须由您实施.对于这个问题,Crawler4J或任何爬虫微框架将会或者应该具有上述操作的实现.Jsoup当您决定如何处理内容时,强大的品质会大放异彩.

我们来看看解析的一些要求.

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

这是Jsoup发挥作用的地方.当然,这里有一些重叠.有些事情也许有可能与两个Crawler4JJsoup,但是这并不能让他们等同.您可以删除从中检索内容的机制,Jsoup并且仍然是一个令人惊奇的工具.如果Crawler4J删除检索,那么它将失去一半的功能.

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

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