Java 使用crawler4j下载js文件

Java 使用crawler4j下载js文件,java,web-crawler,crawler4j,Java,Web Crawler,Crawler4j,我正在尝试使用下载一些网站。我唯一的问题是,即使我为shouldVisit函数中的所有.js文件返回true,它们也不会被下载 @Override public boolean shouldVisit(WebURL url) { return true; } @Override public void visit(Page page) { String url = page.getWebURL().getURL(); System.out.println("URL: "

我正在尝试使用下载一些网站。我唯一的问题是,即使我为
shouldVisit
函数中的所有
.js
文件返回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
文件的URL永远不会被打印出来。

查看源代码,可以在中找到原因

这个类负责从下载的网页中提取链接。脚本标记永远不会被处理

如果你想下载.js文件,我建议你克隆这个项目,扩展这个类,这很简单。您还需要修改调用HTMLContentHandler的WebCrawler。

我注意到“”标记不会被crawler4j处理。这就是所有“.js”文件出现的地方。因此,我不认为问题仅限于“.js”文件——我认为这是“”标记中的任何内容(通常是“.js”文件)

一开始看起来,修改HtmlContentHandler的枚举和startElement()方法可以解决这个问题。我试过了,但没用。在调试时,我观察到Tika解析器或TagSoup(Tika使用)没有拾取脚本标记。因此,它甚至从未到达crawler4j进行处理

作为一种解决方法,我使用JSoup解析我的visit()方法中所有“”标记的HTML,然后计划对这些文件进行爬网


我认为真正的解决方案是确定为什么Tika(或TagSoup)没有拾取脚本标记。这可能是crawler4j调用它的方式。一旦解决了这个问题,修改HtmlContentHandler就可以了

好问题,这是一个重要的隐性实施决策。我认为这应该留给开发人员选择。当@JulienS发布答案时,我正使用完全相同的方法提取.js文件。(使用JSoup)。然而,我认为修改源代码可能会有所帮助。我可以分享代码,但太简单了。