2012-02-25 46 views
2

我想从各种网站获取数据。在堆栈溢出搜索后,我使用crawler4j,因为许多人提出这一点。下面是我的理解/设计: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 ??? 请提出任何更好的设计可用(假设没有饲料可用) 如果是的话,请你指导我如何做。

感谢 Venkat

+0

嗨,有什么输入吗? – topblog 2012-02-25 19:21:34

+0

任何帮助将不胜感激... – topblog 2012-02-26 02:37:59

回答

1

我从来没有使用crawler4j,所以把我带一粒盐意见: 我认为它可以通过爬虫来完成,但它看起来像您需要修改一些代码。具体来说,你可以看看RobotstxtParser.java and HostDirectives.java。您将不得不修改解析器以提取站点地图并在指令中创建一个新字段以返回sitemap.xml。如果没有来自sitemap.txt的指令返回,步骤3可以在fetcher中完成。

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

+0

Thx Lirik。我听说有些网站会提供sitempap.xml中所有产品网址的列表(robots.txt中提到)。而不是爬行整个网站,我通过它的好选择去通过sitemap.xml。还有,猜测爬行整个可能给了一些不需要的链接(常见问题等...),你说什么? – topblog 2012-02-27 18:05:00

+0

实际上,我的要求是获得所有类似于pricegrabber的书籍,手机,笔记本等不同类别URL的列表。 – topblog 2012-02-27 18:07:49

2

Crawler4J无法执行步骤1,2和3,但它对于步骤4和步骤5表现相当好。我的建议是使用Java HTTP Client(例如Http Components 之一)来获取站点地图。使用任何Java XML解析器解析XML并将这些URL添加到集合中。然后用你的列表填充你的crawler4j种子:

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