スポンサーリンク

【C#】C#でAngleSharpを使ってWebページをスクレイピングする方法。

C#
スポンサーリンク

今回の記事はC#でWebページをスクレイピングを、ライブラリのAnglesharpを用いて行う方法についての記事になります。

AngleSharpのみを使用してスクレイピングに取り組んでいましたが、これ単体ではやはり使い勝手が悪い為、業務で使用する場合などはC#のhttp通信ライブラリなどと併用する必要があると思います。その為下記記事が参考になると思いますので是非業務で使用する場合は下記を参考にしてみてください。

C#でhttp通信を行う方法。〜 Get/Post通信 〜
C#で実際のサイトをスクレイピングする手順

ではメインの記事に進みます。

スポンサーリンク

C#でWebスクレイピングをするメリット

C#でスクレイピングをするメリットとしてはやはりWindowsのWindowsサービスにアプリを組み込める点ではないでしょうか?基本的に他の言語でもスクレイピングをすることは可能ですが、Windowsサービスに組み込む場合はC#が最も便利かと思います。とはいえ、結果確認がしやすいと言う観点から今回は、コンソールアプリを作成します。

機械学習などに組み込む場合はPythonかなといったイメージです。

C#でWindowsサービスを作成する手順に関しては下記記事で詳しく記載しているので気になる方は下記を参考にしてください。

【C#】C#を使ってVisual StudioでWindowsサービスを作成する方法

スクレイピングライブラリ「AngleSharp」とは?

こちらはC#で使用できるスクレイピングライブラリです。DOM情報をそのまま取得できるようなので、DOM情報が更新されない場合は非常に使い勝手がいいと思います。

物理的なキーボードをクリックするなどの操作はできませんがDOMからの情報取得に関してはこちらで問題なく操作できるものと思います。この辺りまではPythonと遜色ないかと思います。

物理操作を行う際はブラウザを開いて行うSeleniumやPythonでキーボード操作を自動化する「pyautogui」の使用が考えられます。下記記事が参考になると思います。

Pythonのおすすめライブラリ「pyautogui」の使用方法

AngleSharpをVisualStudioにインストール

まずはVisualStudioにAngleSharpをインストールします。Nugetのパッケージ管理からインストールできます。

メニューバーの[tool]→[nu get]→[パッケージの管理]からAngleSharpを検索してインストールを押すのみです。

AngleSharpでスクレイピング

では実際にサンプルページを参考にしてスクレイピングしてみてください。

下記コードはgoogleの検索ページの入力欄に文字入力、検索ボタンクリック 、表示されたサイトのタイトル一覧を取得するコードになります。(こちらはネットに転がっていたものです。)

using System;
using System.Linq;
using System.Net.Http;
using AngleSharp.Html.Parser;

namespace test
{
    class Program
    {
        // HttpClientのインスタンス
        private static HttpClient client = new HttpClient();
        
        
        

        // HttpClientのインスタンスは使いまわす必要があります。

        static void Main(string[] args)
        {
            //サンプルとして使用するHTML
            //ここはclientなどで取得したものでも良い
            var htmlText = @"
<html>
    <head>
        <meta charset = 'UTF-8'/>
        <title>AngleSharpの使い方</title>
    </head>
    <body>
        <div id = 'header' name='headerName'>
        <h1 id = 'headerTitle'>AngleSharpの使い方</h1>
        </div>
     </body>
</html>
";

            // HtmlParserクラスをインスタンス化
            var parser = new HtmlParser();

            // HtmlParserクラスのParserメソッドを使用してパースする。
            // Parserメソッドの戻り値の型はIHtmlDocument
            var htmlDocument = parser.ParseDocument(htmlText);
            // aタグの要素を全て取得する。
            var urlElements = htmlDocument.QuerySelectorAll("title");
            Console.WriteLine(urlElements.ToArray()[0].TextContent);

        }

        
    }
}

簡単に解説するとベタガキしたHtmlを取得しています。こちらを業務用に使用する場合はhttp通信などをwebcliantを使用して取得すると思いますが、今回に関してはベタがきのhtmlからtitle要素をSelectorを使用して取得しています。

今回のコードではSelectorAllを使用していますがSelectorでも取得できると思います。

http通信とAngleSharpを併用する場合はこの記事の初めの方でも説明した下記記事が参考記事になっております。

C#でAnglesharp+http通信でスクレイピングする方法。〜AngleSharp単体での限界〜

以上で今回の記事は終了します。まだまだC#初心者の枠を抜け切っていないのでどんどん記事を書いていきます。是非他の記事も参考にしてください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

C#
スポンサーリンク
スポンサーリンク

コメント

  1. […] 「C#でAngleSharpを使用してウェブページをスクレイピングする方法」「C#でhttp通信を行う方法。〜 Get/Post通信 〜」 […]

  2. […] また、私の過去記事としていくつかリンク貼っておきますのでそちらも興味があれば是非参考にしてみてください。「【C#】Anglesharpを用いたスクレイピング」 […]

タイトルとURLをコピーしました