C#でスクレイピングは何度かやりましたが、Webアプリとして結果を誰でも見ることができるものを作る方法を考えます。

動的サイトのスクレイピング

単にHTMLを解析するだけなら簡単なのですが、SNSのようなサイトは表示される内容が直接HTML上に書き込まれているわけではなく、JavaScriptなどを使用して動的に表示しています。そこでこれまでに作成したデスクトップアプリではSeleniumやPuppeteerを使用しました。

Webアプリとしてつくる場合も同様にSeleniumやPuppeteerをサーバーにインストールできればよいのですが、これがうまくいきません。専用サーバーやVPSであればできるのかもしれませんが、共有サーバーだと必要なライブラリをインストールする手段がありません。

PhantomJsCloudを使う

そこで別の方法を考えます。今回はPhantomJsCloudを使います。無料プランでは1日に500回という制限がありますが、実験で使ってみるのであれば充分だと思います。Sign up now!のボタンをクリックしてメールアドレスを入力します。すると登録したアドレスにメールがくるのでリンクをクリックしましょう。あとは適当なパスワードを入力するとログインできるようになります。

ログインすると ApiKey が表示されているのでこれをメモしておきましょう。

ターゲットにするサイト

試しにこれをスクレイピングしてみることにします。

HTMLを見るとこのようになっていて、HTMLだけでは何が書かれているのかわかりません。

解析ツールを使うと以下のような構造になっていることがわかります。

PhantomJsCloudでスクレイピングする

ではPhantomJsCloudで必要な内容を抜き出してみましょう。ボタンをクリックするとレンダリングされたHTMLと鳩でもわかるC#の書き込みのみを表示する処理を実装することにします。

1日あたりの実行回数の制限があるので、似たような動作をさせているだけで、実際のコードは以下のものとは異なります。

index.js

レンダリングされたHTMLソースを取得

まずレンダリングされたHTMLソースを表示する処理を示します。

必要な部分だけを抜き出す

次に「鳩でもわかるC#」の書き込みのみを表示する処理を示します。

1日あたりの実行回数の制限があるので、似たような動作をさせているだけで、実際のコードは以下のものとは異なります。