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

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

アイアンウェブスクレイパーとは?

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

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

インストール

最初のステップはIron Web Scraperをインストールすることです。 NuGet または DLLをダウンロードする をご覧ください。

必要なクラスはすべて、Iron Web Scraper名前空間にあります。 もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

PM > Install-Package IronWebScraper (アイアンウェブスクレイパー) もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

一般的な使用例

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

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

ウェブサイトの移行

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

検索インデックスの作成

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

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

アイアンウェブスクレイパーの使い方

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

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つの パース メソッド。 解析メソッドは、インターネットからダウンロードされたウェブページを読み込み、jQueryのようなCSSセレクタを使ってコンテンツを選択し、関連するテキストや画像を抽出して使用します。

1年以内 パース メソッドでは、どのハイパーリンクをクローラーが追い続け、どのハイパーリンクを無視するかを指定することもできる。

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

これから進む

アイアン・ウェブ・スクレーパー(Iron Web Scraper)の詳細については、以下をご覧ください。 APIリファレンスドキュメントそして、私たちのドキュメントのチュートリアルセクションにある例を見てください。

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

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