我正在尝试从各种网站获取数据。在堆栈溢出后,我使用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.
现在,你能告诉我,爬行器4J能完成步骤1、2和3吗???请建议提供更多好的设计(假设没有可用的提要)如果是的话,请你指导我怎么做。
谢谢Venkat
Crawler4J无法执行步骤1、2和3,但它在步骤4和5中执行得很好。我的建议是使用Java HTTP客户端,例如HttpComponents中的客户端以获取网站地图。使用任何Java XML解析器解析XML,并将url添加到集合中。然后用以下列表填充您的crawler4j种子:
for(String url : sitemapsUrl){
controller.addSeed(url);
}
controller.start(YourCrawler, nbthreads);
我从未使用过crawler4j,所以对我的观点持保留态度:我认为这可以由爬虫完成,但看起来你必须修改一些代码。具体来说,您可以查看RobotstxtParser.java
和HostDirectives.java
。您必须修改解析器来提取站点地图,并在指令中创建一个新字段来返回sitemap.xml
。如果没有从sitemap.txt返回指令,则可以在fetcher中完成步骤3
然而,我不确定通过检查sitemap.txt
到底能得到什么:除非你在寻找特定的东西,否则这似乎是一件无用的事情。