1

crawler4j特定のプレフィックスを持つ特定の URL でクロールしたいと思います。

たとえば、URL がそれで始まるhttp://url1.com/timer/image場合は有効です。例: http://url1.com/timer/image/text.php.

この URL は無効です:http://test1.com/timer/image

私はそれを次のように実装しようとしました:

public boolean shouldVisit(Page page, WebURL url) {
    String href = url.getURL().toLowerCase();
    String adrs1 = "http://url1.com/timer/image";
    String adrs2 = "http://url2.com/house/image";

    if (!(href.startsWith(adrs1)) || !(href.startsWith(adrs2))) {
        return false;
    }

    if (filters.matcher(href).matches()) {
        return false;
    }

    for (String crawlDomain : myCrawlDomains) {
        if (href.startsWith(crawlDomain)) {
            return true;
        }
    }

    return false;
}

ただし、クローラーは他の URL にもアクセスするため、これは機能していないようです。

私ができることは何ですか?

あなたの答えに感謝します!

4

2 に答える 2

4

基本的に、クロールしたい許可された URL を保持するプレフィックスの配列を持つことができます。そして、メソッド内では、許可されたプレフィックスのいずれかと一致する場合にのみ、配列をトラバースして true を返します。つまり、クロールしたくないドメインをリストする必要はありません。

public boolean shouldVisit(Page page, WebURL url) {
    String href = url.getURL().toLowerCase();
    // prefixes that you want to crawl
    String allowedPrefixes[] = {"http://url1.com", "http://url2.com"};

    for (String allowedPrefix : allowedPrefixes) {
        if (href.startsWith(allowedPrefix)) {
            return true;
        }
     }

    return false;
}

条件が正しくないため、コードが機能していません:

(!(href.startsWith(adrs1)) || !(href.startsWith(adrs2))

もう 1 つの理由は、構成していない可能性があることですcrawlerDomains。これは、アプリケーションの起動時に呼び出して構成されます。CrawlController#setCustomData(crawler1Domains);

Crawler4j のサンプル ソース コードを見てください。crawlerDomain は次の場所に設定されています

于 2014-09-16T09:23:39.873 に答える