java - 使用crawler4j下载js文件

标签 java web-crawler crawler4j

我正在尝试使用 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: " + url);
}

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

最佳答案

我注意到“<script>”标签不会被crawler4j处理。这是所有“.js”文件发生的地方。所以我不认为问题仅限于“.js”文件 - 我认为它是“<script>”标签内的任何内容(通常恰好是“.js”文件)。

最初看起来修改 HtmlContentHandler 的 Enumeration 和 startElement() 方法确实可以解决问题。我尝试过,但没有成功。在调试它时,我观察到 Tika 解析器或 TagSoup(Tika 使用的)没有获取脚本标签。因此,它甚至从未到达crawler4j 进行处理。

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

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

关于java - 使用crawler4j下载js文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14413965/

相关文章:

java - Apache Camel : I can't get an object out of the body and transform it

java - Android Studio 仅更改一次启动 Activity

python - 使用 Scrapy 爬取带有 JavaScript 的站点

python - 网站 map 爬虫中永无休止的 for 循环

javascript - 如何通过crawler4j下载JavaScript文件中包含的文本?

java - 杀死对象创建的线程

java - 如何解决 "Exception in thread "Animation Thread"java.lang.NullPointerException"?

java - Eclipse Java - 使用一个项目的输出作为其他项目中的库

java - 使用 Crawler4j 爬网站点列表

grails - 使用Grails应用程序的Crawler4j引发错误