2

我正在尝试使用crawler4j下载一些网站。我唯一的问题是,即使我为函数.js中的所有文件返回 true shouldVisit,它们也永远不会被下载。

@Override
public boolean shouldVisit(WebURL url) {
    return true;
}

@Override
public void visit(Page page) {
    String url = page.getWebURL().getURL();
    System.out.println("URL: " + url);
}

文件的 URL.js永远不会被打印出来。

4

2 回答 2

1

看源码,原因在HTMLContentHandler 类中。

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

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

于 2013-02-14T22:03:50.063 回答
1

我注意到 crawler4j 没有处理“<script>”标签。这是所有“.js”文件出现的地方。所以我不认为问题仅限于“.js”文件——我认为它是“<script>”标签中的任何东西(通常恰好是“.js”文件)。

最初看起来修改 HtmlContentHandler 的 Enumeration 和 startElement() 方法会解决问题。我试过了,但没有用。在调试它时,我观察到 Tika Parser 或 TagSoup(Tika 使用)没有拾取脚本标签。结果,它甚至从未到达 crawler4j 进行处理。

作为一种解决方法,我使用 JSoup 在我的 visit() 方法中解析所有“<script>”标签的 HTML,然后安排对这些文件进行爬网。

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

于 2013-02-20T22:37:55.680 回答