スポンサーリンク

【C#】Anglesharpでaspxのページをスクレイピングする方法ご紹介。

C#
スポンサーリンク

今回の記事は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でフォームを送信

こちらは過去にも記事を書いているので下記記事も参考になるかと思います。

【C#】AngleSharpでボタンクリック

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通信でフォームを送信

こちらも過去に記事を書いているのでそちらも参考になります。

【C#】httpクライアントでスクレイピングする方法。

こちらは次のページに進む際のpost通信をかくにんする必要があります。開発者キットのネットワークからリクエストフォームデータの中身を確認して上記の参考サイトのようにpost通信を行う必要があります。上記のサイトではgoogleのサイト対してpost通信を行っていますが、基本的にはaspxの通信もpost通信でしかないので模倣することができます。

では今回の記事は以上です。正直対象とするページごとに内容が変わるので説明が難しいです。もし何か気になるサイトがあればコメントいただければ確認して返信しますので気軽にお声がけください。

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

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

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

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

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

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

コメント

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