Unity上でAngleSharpを利用したスクレイピングを行う


自己紹介

こんにちはゆずです。@Yuzu_Unity
自分はUnityエンジニア・3DCGデザイナーの学生です。(軸はエンジニア 4年ほど…)

はじめに

Unity上でapiを利用せずスクレイピングで色々取れないかなぁと思って
調べて動かせたのでとりあえずメモ(スクレイピングをよくわからない…)
※AngleSharpはv0.10以降かなりAPIが変わっているみたいなので他の記事はあまり参考にならないみたいです…
今回利用したのはv0.12.1です。

今回利用するもの

VisualStudio2017

Unity2018.3以上(UniTaskを利用するため)

UniTask
https://github.com/Cysharp/UniTask

AngleSharp
https://github.com/AngleSharp/AngleSharp

AngelSharp.Js
https://github.com/AngleSharp/AngleSharp.Js

Jint
https://github.com/sebastienros/jint

AngleSharpとは?

とりあえずC#でマルチプラットフォームにスクレイピングが行えるライブラリ
Unity対応しているらしい…

環境構築

1.dllを手に入れる

方法は2通り
プロジェクトデータをダウンロードしビルドを行うか
パッケージマネージャーから取得するかです。
後者のほうが簡単です。
今回は
AngleSharp.dll
AngelSharp.Js.dll (Jsを有効にするため)
Jint.dll (AngelSharp.Jsを使う際必須)
をインポートしました。

Assets/Plugins内に配置します
(その他UniTaskをインポート&設定)

使い方

パース方法2種類あるそうです
名前空間が過去バージョンよりかなり変わっています。

    using UniRx.Async;
    using AngleSharp.Html.Parser;
    using AngleSharp.Html.Dom;
    using System.Net.Http;

    async UniTask<IHtmlDocument> Parce()
    {
        var parser = new HtmlParser();
        using (var client = new HttpClient())
        using (var stream = await client.GetStreamAsync(new Uri(uri)))
        {
            return await parser.ParseDocumentAsync(stream);
        }
    }
   using UniRx.Async;
   using AngleSharp;
   using AngleSharp.Dom;

   async UniTask<IDocument> Parce()
    {
        // WithJs()で、JavaScriptを有効 動作してるか不明
        var config = Configuration.Default.WithDefaultLoader().WithJs();
        var context = BrowsingContext.New(config);
        return await context.OpenAsync(uri);
    }

その他使いかた等は…
https://qiita.com/NekozeDaisensei/items/c74f71e5d79d6de05841

とりあえずGitHubにテストデータ上げてみました...

ツイッターURLをスクレイピング

余談

使い道が特にないが…
Unity上でも動くということが確認できたのでよしとする…
自分はスクレイピングについて知らないため、いろいろテストしてほしい…