【问题标题】:Efficient design of crawler4J to get datacrawler4J 获取数据的高效设计
【发布时间】:2012-02-25 17:53:56
【问题描述】:

我正在尝试从各种网站获取数据。在堆栈溢出搜索后,我正在使用 crawler4j,正如许多人所建议的那样。以下是我的理解/设计:

 1. Get sitemap.xml from robots.txt.
 2. If sitemap.xml is not available in robots.txt, look for sitemap.xml directly.  
 3. Now, get the list of all URL's from sitemap.xml 
 4. Now, fetch the content for all above URL's
 5. If sitemap.xml is also not available, then scan entire website.

现在,请您告诉我,crawler4J 可以执行步骤 1、2 和 3 吗? 请建议任何更好的设计可用(假设没有可用的提要) 如果可以,请指导我怎么做。

谢谢 文卡特

【问题讨论】:

  • 任何帮助将不胜感激......

标签: parsing web-crawler crawler4j


【解决方案1】:

Crawler4J 无法执行步骤 1,2 和 3,但它在步骤 4 和 5 中执行得相当好。我的建议是使用 Java HTTP 客户端,例如来自 Http Components 的客户端 获取站点地图。使用任何 Java XML 解析器解析 XML 并将 URL 添加到集合中。然后使用列表填充您的 crawler4j 种子:

for(String url : sitemapsUrl){
 controller.addSeed(url);
}
controller.start(YourCrawler, nbthreads);

【讨论】:

    【解决方案2】:

    我从未使用过 crawler4j,所以请持保留态度: 我认为可以通过爬虫来完成,但是看起来您必须修改一些代码。具体可以看一下RobotstxtParser.java and HostDirectives.java。您必须修改解析器以提取站点地图并在指令中创建一个新字段以返回 sitemap.xml。如果没有从 sitemap.txt 返回指令,则可以在 fetcher 中完成第 3 步。

    但是,我不确定您通过检查sitemap.txt 获得了什么:除非您正在寻找特定的东西,否则这似乎是无用的事情。

    【讨论】:

    • 谢谢 Lirik。我听说有些网站会在 sitempap.xml 中提供所有产品 url 的列表(在 robots.txt 中提到)。我不是爬取整个网站,而是通过sitemap.xml 是一个不错的选择。并且还猜测整个抓取可能会提供一些不必要的链接(常见问题等......),你说什么?
    • 实际上我的要求是获取与 pricegrabber 类似的不同类别的所有 URL 列表,例如书籍、手机、笔记本电脑等。
    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多