今回の記事はAnglesharpでaspxのページをスクレイピングする方法に関してご紹介します。Web業界にはこういった古い技術(aspx)などが大量に眠っている為、html構成ではない為スクレイピングを諦める方もしばしばいると思いますが諦める必要はございません。分かりやすく解説していきます。
aspxとは
下記引用です。
エーエスピーエックス. .aspx とは、 Microsoft 社の開発した WWW サーバーソフト に搭載されているスクリプティング 環境 の「 ASP 」( Active Server Pages ) ファイル に付く 拡張子 のことである。. ASP ファイル は、 HTML とスクリプトが融合されたようなもので、 サーバー 側の マシン でスクリプトが処理され、その処理結果が HTML として クライアント ( ユーザー )に返されるという仕組みを持っている。
要するに.netベースのWebサイトのページです。htmlのように静的なものではなくサイト内でレンダリングを行っている為スクレイピングには一手間必要です。
C#でAnglesharpでaspxのページをスクレイピング
では実際にスクレイピングをしていきましょう。
手順としてはAngleSharpのみに頼るのではなくhttp通信をフル活用してaspxの通信を模倣します。
ブラウザを開いている状態でF12をクリックし、開発者キットを開きます。ボタン押下でAspxの構造を見ることができます。今回は暫定で下記のようなaspxページがあったとします。
<%@ Page language="c#" Codebehind="DotfuscatorASP.aspx.cs" AutoEventWireup="false" Inherits="DotfuscatorASP.Sample" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Dotfuscator ASP.NET Sample</title>
</HEAD>
<body>
<h1>Dotfuscator ASP.NET Sample</h1>
<form id="SampleForm" method="post" runat="server">
<p>You are visitor number <asp:Label id="CountLabel" runat="server" /> to this site!</p>
</form>
</body>
</HTML>
このページのフォーム情報を送信してその先のページ情報を取得していきましょう。
SubmitAsyncでフォームを送信
こちらは過去にも記事を書いているので下記記事も参考になるかと思います。
using System;
using System.Linq;
using System.Threading.Tasks;
using AngleSharp;
using AngleSharp.Html.Dom;
namespace test
{
class Program
{
static async Task Main(string[] args)
{
var doc = await aspxsearch();
}
private static async Task<System.Collections.Generic.IEnumerable<string>> aspxsearch()
{
// セットアップ
var config = Configuration.Default.WithDefaultLoader();
var context = BrowsingContext.New(config);
// 検索ページを開く
var document = await context.OpenAsync("指定のサイト");
// 指定したキーワード(test)で、検索を行う
var form = document.QuerySelector("form") as IHtmlFormElement;
var doc = await form.SubmitAsync();
return doc;
}
}
}
aspxのページのフォームを取得し、フォーム送信を行います。
Post通信でフォームを送信
こちらも過去に記事を書いているのでそちらも参考になります。
こちらは次のページに進む際のpost通信をかくにんする必要があります。開発者キットのネットワークからリクエストフォームデータの中身を確認して上記の参考サイトのようにpost通信を行う必要があります。上記のサイトではgoogleのサイト対してpost通信を行っていますが、基本的にはaspxの通信もpost通信でしかないので模倣することができます。
では今回の記事は以上です。正直対象とするページごとに内容が変わるので説明が難しいです。もし何か気になるサイトがあればコメントいただければ確認して返信しますので気軽にお声がけください。
コメント