我正在尝试使用crawler4j下载某些网站。我唯一的问题是即使我对.js
函数中的所有shouldVisit
文件都返回true,它们也永远不会被下载。
@Override
public boolean shouldVisit(WebURL url) {
return true;
}
@Override
public void visit(Page page) {
String url = page.getWebURL().getURL();
System.out.println("URL: " + url);
}
.js
文件的网址永远不会被打印出来。
答案 0 :(得分:1)
查看来源,原因可以在HTMLContentHandler class。
中找到此类负责从下载的网页中提取链接。 脚本标记永远不会被处理。
如果你想下载.js文件,我建议你克隆项目,扩展这个类,这很简单。您还需要修改调用HTMLContentHandler的WebCrawler。
答案 1 :(得分:1)
我注意到“< script>” crawler4j无法处理标记。这是所有“.js”文件发生的地方。所以我不认为问题只限于“.js”文件 - 我认为这是“< script>”中的任何内容标签(通常恰好是“.js”文件)。
它最初看起来像修改HtmlContentHandler的Enumeration和startElement()方法将解决问题。我试过了,但没用。在调试时,我观察到Tika Parser或TagSoup(Tika使用的)没有拿起脚本标签。因此,它甚至从未到达crawler4j进行处理。
作为一种解决方法,我使用JSoup解析所有“< script>”的HTML我的visit()方法中的标签,然后我计划对这些文件进行爬网。
我认为真正的解决方案是确定为什么Tika(或TagSoup)没有拿起脚本标签。它可能是crawler4j调用它的方式。一旦解决了,那么修改HtmlContentHandler就行了。