C#でのWebスクレイピング

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronWebscraperとは?

IronWebscraper(IronWebscraper)は、C#(シーシャープ)と.NETプログラミングプラットフォームのためのクラスライブラリとフレームワークで、開発者がプログラムでウェブサイトを読み取り、そのコンテンツを抽出することを可能にします。 これは、ウェブサイトや既存のイントラネットをリバースエンジニアリングして、データベースやJSONデータに戻すのに最適だ。 インターネットから大量のドキュメントをダウンロードするのにも便利です。

多くの点で、IronWebscraperはPythonのScrapyライブラリと似ているが、C#(シーシャープ)の利点、特にウェブスクレイピングプロセスの進行中にコードをステップスルーしてデバッグする機能を活用している。

インストール

最初のステップはIronWebScraperをインストールすることです。これは、次の場所から行えます。NuGetまたはDLLをダウンロードする私たちのウェブサイトから。

必要なクラスはすべて、Iron Web Scraper名前空間にあります。

PM > Install-Package IronWebScraper

一般的な使用例

ウェブサイトからデータベースへの移行

IronWebscraperは、ウェブサイトを構造化データベースに再構築するためのツールと方法を提供します。 この技術は、レガシーのウェブサイトやイントラネットから新しいC#(シーシャープ)アプリケーションにコンテンツを移行するときに便利です。

ウェブサイトの移行

C#(シーシャープ)でウェブサイトの一部または全体のコンテンツを簡単に抽出できるため、ウェブサイトやイントラネットリソースの移行やアップグレードにかかる時間とコストを削減できます。 これは、各ウェブページで見ることができるものまでデータをフラットにし、以前のSQLデータ構造を理解する必要もなく、複雑なSQLクエリを構築する必要もないため、SQLを直接変換するよりもはるかに効率的である。

検索インデックスの作成

IronWebscraperは、構造化されたデータを読み取り、すべてのページを読み取り、組織内の検索エンジンに正確に入力されるように正しいデータを抽出するために、あなた自身のウェブサイトやイントラネットに向けることができます。

IronWebscraperは、検索インデックス用にコンテンツをスクレイピングする理想的なツールです。 アイアンサーチのような検索アプリケーションは、IronWebscraperから構造化コンテンツを読み込み、強力なエンタープライズ検索システムを構築することができる。

IronWebscraperの使い方

IronWebscraperの使い方を学ぶには、サンプルを見るのが一番だ。 この基本的な例では、ウェブサイトのブログからタイトルをスクレイピングするクラスを作成します。

using IronWebScraper;

namespace WebScrapingProject
{
    class MainClass
    {
        public static void Main(string [] args)
        {
            var scraper = new BlogScraper();
            scraper.Start();
        }
    }

    class BlogScraper : WebScraper
    {
        public override void Init()
        {
            this.LoggingLevel = WebScraper.LogLevel.All;
            this.Request("https://ironpdf.com/blog/", Parse);
        }

        public override void Parse(Response response)
        {
            foreach (var title_link in response.Css("h2.entry-title a"))
            {
                string strTitle = title_link.TextContentClean;
                Scrape(new ScrapedData() { { "Title", strTitle } });
            }

            if (response.CssExists("div.prev-post > a [href]"))
            {
                var next_page = response.Css("div.prev-post > a [href]")[0].Attributes ["href"];
                this.Request(next_page, Parse);
            }
        }
    }
}
using IronWebScraper;

namespace WebScrapingProject
{
    class MainClass
    {
        public static void Main(string [] args)
        {
            var scraper = new BlogScraper();
            scraper.Start();
        }
    }

    class BlogScraper : WebScraper
    {
        public override void Init()
        {
            this.LoggingLevel = WebScraper.LogLevel.All;
            this.Request("https://ironpdf.com/blog/", Parse);
        }

        public override void Parse(Response response)
        {
            foreach (var title_link in response.Css("h2.entry-title a"))
            {
                string strTitle = title_link.TextContentClean;
                Scrape(new ScrapedData() { { "Title", strTitle } });
            }

            if (response.CssExists("div.prev-post > a [href]"))
            {
                var next_page = response.Css("div.prev-post > a [href]")[0].Attributes ["href"];
                this.Request(next_page, Parse);
            }
        }
    }
}
Imports IronWebScraper

Namespace WebScrapingProject
	Friend Class MainClass
		Public Shared Sub Main(ByVal args() As String)
			Dim scraper = New BlogScraper()
			scraper.Start()
		End Sub
	End Class

	Friend Class BlogScraper
		Inherits WebScraper

		Public Overrides Sub Init()
			Me.LoggingLevel = WebScraper.LogLevel.All
			Me.Request("https://ironpdf.com/blog/", AddressOf Parse)
		End Sub

		Public Overrides Sub Parse(ByVal response As Response)
			For Each title_link In response.Css("h2.entry-title a")
				Dim strTitle As String = title_link.TextContentClean
				Scrape(New ScrapedData() From {
					{ "Title", strTitle }
				})
			Next title_link

			If response.CssExists("div.prev-post > a [href]") Then
				Dim next_page = response.Css("div.prev-post > a [href]")(0).Attributes ("href")
				Me.Request(next_page, AddressOf Parse)
			End If
		End Sub
	End Class
End Namespace
VB   C#

特定のウェブサイトをスクレイピングするには、そのウェブサイトを読むための独自のクラスを作らなければならない。このクラスはWeb Scraperを継承する。 initを含むいくつかのメソッドをこのクラスに追加し、初期設定を行い、最初のリクエストを開始する。

また、少なくとも1つのParseメソッドを追加する必要があります。 解析メソッドは、インターネットからダウンロードされたウェブページを読み込み、jQueryのようなCSSセレクタを使ってコンテンツを選択し、関連するテキストや画像を抽出して使用します。

Parse メソッド内で、クローラーが引き続き追跡するハイパーリンクと無視するハイパーリンクを指定することもできます。

scrapeメソッドを使ってデータを抽出し、後で使用するために便利なJSONスタイルのファイル形式にダンプすることができる。

これから進む

IronWebscraperの詳細については、以下をご覧ください。APIリファレンスドキュメントそして、私たちのドキュメントのチュートリアルセクションにある例を見てください。

次にお勧めするのは、次の例である。C#(シーシャープ)による "ブログ "ウェブスクレイピングの例ここでは、WordPressブログなどのブログからテキスト・コンテンツを抽出する方法を学ぶ。 これはサイトの移行に非常に役立つかもしれない。

そこから、他の選手にも目を向けるかもしれない。上級ウェブスクレイピング・チュートリアルここでは、さまざまな種類のページがあるウェブサイト、eコマース・ウェブサイト、インターネットからデータをスクレイピングする際に複数のプロキシ、ID、ログインを使用する方法などの概念を見ていくことができる。