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);
}

.jsファイルのURLが印刷されることはありません。

4

2 に答える 2

1

「<script>」タグがcrawler4jによって処理されないことに気づきました。これは、すべての「.js」ファイルが発生した場所です。したがって、問題が「.js」ファイルだけに限定されているとは思いません。「<script>」タグ(通常は「.js」ファイル)内にあるものだと思います。

最初は、HtmlContentHandlerのEnumerationを変更すると、startElement()メソッドが問題を解決するように見えます。私はそれを試しましたが、うまくいきませんでした。デバッグ中に、TikaパーサーまたはTagSoup(Tikaが使用)のいずれかがスクリプトタグを取得していないことを確認しました。その結果、処理されるためにcrawler4jに到達することさえありません。

回避策として、JSoupを使用してvisit()メソッドのすべての「<script>」タグのHTMLを解析してから、それらのファイルのクロールをスケジュールしました。

本当の解決策は、Tika(またはTagSoup)がスクリプトタグを取得しない理由を特定することだと思います。これは、crawler4jによって呼び出される方法である可能性があります。それが解決されると、HtmlContentHandlerの変更が機能します。

于 2013-02-20T22:37:55.680 に答える
1

ソースを見ると、その理由はHTMLContentHandler クラスにあります。

このクラスは、ダウンロードした Web ページからリンクを抽出します。scriptタグは処理されません。

.js ファイルをダウンロードする場合は、プロジェクトのクローンを作成し、このクラスを拡張することをお勧めします。これは非常に簡単です。HTMLContentHandler を呼び出す WebCrawler も変更する必要があります。

于 2013-02-14T22:03:50.063 に答える