首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Crawler4j页面爬行和解析的Java与Jsoup

用于Crawler4j页面爬行和解析的Java与Jsoup
EN

Stack Overflow用户
提问于 2016-01-19 22:55:11
回答 1查看 4.8K关注 0票数 10

我想得到一个页面的内容,并提取其中的特定部分。据我所知,这类任务至少有两种解决方案:Crawler4j珍汤

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

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

但是我刚刚检查过,除了解析功能之外,Jsoup还能够爬行一个页面,而Crawler4j不仅能够爬行页面,而且能够解析它的内容。

Crawler4j和Jsoup有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 05:57:12

爬行不仅仅是检索单个URI的内容。如果您只想检索某些页面的内容,那么使用类似Crawler4J之类的内容并没有真正的好处。

让我们来看看一个例子。假设你想爬一个网站。所需经费将是:

  1. 给出基URI (主页)
  2. 从每个页面中获取所有URI,并检索这些URI的内容。
  3. 对您检索的每个URI进行递归移动。
  4. 仅检索该网站内URI的内容(可能有外部URI引用另一个网站,我们不需要这些)。
  5. 避免循环爬行。页A有页B的URI (同一站点)。页面B有页面A的URI,但是我们已经检索了页面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是一个为HTTP请求提供简单API的解析器。对于任何更复杂的事情,都没有实现。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34888510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档