今回の記事はC#でAngleSharpとhttp通信(Post)を用いてウェブページをスクレイピングする方法をご紹介します。
私の過去記事でAngleSharpを単体で使用したスクレイピングや、http通信を行う方法に関して記事にしているので各ライブラリの詳細な使用方法は各記事から見ていってください。
「C#で実サイトにスクレイピングを行う手順」
「C#でAngleSharpを使用してウェブページをスクレイピングする方法」
「C#でhttp通信を行う方法。〜 Get/Post通信 〜」
では、メインの記事に進みます。
C#でAngleSharp + http通信(Post)を使ってスクレイピング
VisualStudioのコンソールアプリで下記コードのように作成しました。
AngleSharp + Post通信
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; // Taskを使用するために追加します。
using System.Net.Http;
using AngleSharp.Html.Parser;
using AngleSharp.Html.Dom;
using AngleSharp;
using AngleSharp.Dom;
using AngleSharp.Common;
using AngleSharp.Html;
using AngleSharp.Text;
namespace Scraiping
{
class Program
{
// HttpClientのインスタンス作成
private static HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
//Postに与えるパラメータ
var parameter = new Dictionary<string, string>()
{
{ "name", "value" },
{ "テスト", "値" },
};
//Postで付与するパラメータ設
var target = new FormUrlEncodedContent(parameter);
//Post通信
var TarRes = await client.PostAsync($"指定のURL", target);
//Post通信で帰ってきたレスポンスをStringに変換
var TarDoc = await TarRes.Content.ReadAsStringAsync();
// htmlパース
var parser = new HtmlParser();
IHtmlDocument ParserList = await parser.ParseDocumentAsync(TarDoc);
var document = ParserList.GetElementById("指定のID").TextContent.ToString();
Console.WriteLine(document)
}
}
}
Post通信では例を挙げるページを作成するのも準備するのもめんどくさかったのでURLは自由に設定できるようになっております。Post時に一緒に投げるパラメータをディベロッパーツールなどでネットワークを確認して必要な項目を確認してみましょう。
次はGet通信をみていきましょう。
AngleSharp + Get通信
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using AngleSharp.Html.Parser;
using AngleSharp.Html.Dom;
namespace test
{
class Program
{
// HttpClientのインスタンス
private static HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
// HTMLを非同期で取得します。
var url = "https://ja.wikipedia.org/wiki/メインページ";
var response = client.GetAsync(url);
var content = await response.Result.Content.ReadAsStringAsync();
var parser = new HtmlParser();
IHtmlDocument ParserList = await parser.ParseDocumentAsync(content);
var document = ParserList.GetElementsByClassName("mainpage-heading-title").Select(m => m.TextContent);
Console.WriteLine(document.ToArray()[0].ToString());
}
}
}
Wikiのより抜き記事と言う文言が出力されればOKです。Post通信との違いはパラメータの設定がない為、ページを読み込む場合の通信時に使用されます。その為、Post通信よりも使用しやすいかもしれません。
今回の記事は以上です。他にもC#の記事を多数記載しています。是非参考にしてみてください。
コメント
[…] 「【C#】Anglesharpとhttp通信を用いてスクレイピングを行う方法」 […]
[…] 「C#でAnglesharp+http通信でスクレイピングする方法。〜AngleSharp単体での限界〜」 […]
[…] 「C#でAnglesharp+http通信でスクレイピングする方法。〜AngleSharp単体での限界〜」 […]