Abotでの「対象URL絞り込み」と「クロール毎イベント」
C#でWebサイトをクロールするライブラリの「Abot Web Crawler」の続きです。
基本的な使い方は前回書いた通りですが、この記事では、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がバージョンごとに異なるので、最新の質問から回答を探したほうが効率的です。