0

Crawler4j では、関数をオーバーライドし、boolean shouldVisit(WebUrl url)'true' と 'false' を返すことで特定の URL のクロールを許可するかどうかを制御できます。

しかし、実行時に URL を追加できますか? はいの場合、それを行う方法は何ですか? 現在、クラス内addSeed(String url)の前に関数を使用してプログラムの先頭に URL を追加できます。 を使用して新しい URL を追加しようとすると、エラーが発生します。ここにエラー画像があります。start(BasicCrawler.class, numberOfCrawlers)CrawlControlleraddSeed(String url)

質問に答えるためにプロジェクトについてさらに詳細が必要な場合はお知らせください。

4

2 に答える 2

1

あなたはこれを行うことができます。

クラスpublic void schedule(WebURL url)のメンバーであるクローラー フロンティアに URL を追加するために使用します。Frontier.javaただし、このためには、タイプの URL が必要ですWebURL。あなたの文字列を作りたい場合WebURL。文字列 (url) が WebURL にどのように変換されているかを確認するには、クラス内のaddSeed()(以下のコード) を参照してください。CrawlController.java

また、既存のフロンティア インスタンスを使用します。

お役に立てれば..

public void addSeed(String pageUrl, int docId) {
        String canonicalUrl = URLCanonicalizer.getCanonicalURL(pageUrl);
        if (canonicalUrl == null) {
            logger.error("Invalid seed URL: " + pageUrl);
            return;
        }
        if (docId < 0) {
            docId = docIdServer.getDocId(canonicalUrl);
            if (docId > 0) {
                // This URL is already seen.
                return;
            }
            docId = docIdServer.getNewDocID(canonicalUrl);
        } else {
            try {
                docIdServer.addUrlAndDocId(canonicalUrl, docId);
            } catch (Exception e) {
                logger.error("Could not add seed: " + e.getMessage());
            }
        }

        WebURL webUrl = new WebURL();
        webUrl.setURL(canonicalUrl);
        webUrl.setDocid(docId);
        webUrl.setDepth((short) 0);
        if (!robotstxtServer.allows(webUrl)) {
            logger.info("Robots.txt does not allow this seed: " + pageUrl);
        } else {
            frontier.schedule(webUrl); //method that adds URL to the frontier at run time
        }
    } 
于 2012-07-19T06:39:00.863 に答える
0

おそらく、この関数は好きなように実装でき、クロールしてはならないURLのリストに依存させることができます。次に、の実装でshouldVisitは、特定のURLが禁止URL(または許可URL)のリストに含まれているかどうかを確認し、それに基づいてtrueまたはfalseを返します。

于 2012-07-14T09:37:29.147 に答える