読者です 読者をやめる 読者になる 読者になる

Abotでの「対象URL絞り込み」と「クロール毎イベント」

C#でWebサイトをクロールするライブラリの「Abot Web Crawler」の続きです。

aoki1210.hatenablog.jp

基本的な使い方は前回書いた通りですが、この記事では、URLのフィルタ方法とクロール時の基本イベントについて紹介します。

URLによる対象ページの絞り込み(条件設定)

URLを絞り込むには、Abot.DemoのGetCustomBehaviorUsingLambdaWebCrawlerが参考になります。デフォルトでは、呼び出し部分がコメントアウトされているので、呼び出すように設定すると、クロールするURLを条件に応じて絞り込むことができます。

private static IWebCrawler GetCustomBehaviorUsingLambdaWebCrawler()
{
    IWebCrawler crawler = GetDefaultWebCrawler();

    crawler.ShouldCrawlPage((pageToCrawl, crawlContext) =>
    {
        if (!pageToCrawl.Uri.AbsoluteUri.Contains("example.com/japan/"))
            return new CrawlDecision { Allow = false, Reason = "日本以外のページは不要" };

        return new CrawlDecision { Allow = true };
    });
}

クローリング毎のイベントとHTMLの取得

クロール時には、ここのURL毎にイベントを呼び出すことができます。Abotは複数のページを並行して取得することができるため、非同期のイベントとして登録します。

イベント登録
crawler.PageCrawlStartingAsync += crawler_ProcessPageCrawlStarting;
crawler.PageCrawlCompletedAsync += crawler_ProcessPageCrawlCompleted;
crawler.PageCrawlDisallowedAsync += crawler_PageCrawlDisallowed;
crawler.PageLinksCrawlDisallowedAsync += crawler_PageLinksCrawlDisallowed;
イベント毎に呼び出される処理
static void crawler_ProcessPageCrawlStarting(object sender, PageCrawlStartingArgs e)
{
    // クローリング前の処理
}

static void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
{
    // クロールしてページを読み込んだ後の処理
    PageContent content = e.CrawledPage.Content;
    // 取得したHTMLを出力
    System.Console.WriteLine(content.Text);
}

static void crawler_PageLinksCrawlDisallowed(object sender, PageLinksCrawlDisallowedArgs e)
{
    // クロール対象ページのリンクが読み込めなかった時の処理
}

static void crawler_PageCrawlDisallowed(object sender, PageCrawlDisallowedArgs e)
{
    // クロール対象ページが読み込めなかった時の処理
}

AbotのQ&Aフォーラム

なお、質問は、GoogleGroupのフォーラムで行われています。

https://groups.google.com/forum/#!forum/abot-web-crawler

APIがバージョンごとに異なるので、最新の質問から回答を探したほうが効率的です。