C#でTwitterのツイートをスクレイピングすることはできるのでしょうか? 実際に検索してみると情報が公開されていますが、じっさいに書いてあるとおりにやってもうまくいきません。HTMLを解析してスクレイピングする場合、仕様を変更されるとその方法は通用しません。

HTMLをみてもそこにはツイートの内容は書かれていません。JavaScriptで動的に表示されるコンテンツなので

とやってstrを解析しても肝心のツイートを取得することはできません。

それからHttpClientをusingで囲っているサンプルコードを見かけますが、やってはいけません。

そこでSelenium.WebDriverを使います。NuGetでSelenium.WebDriverとSelenium.Support、そして操作したいブラウザのDriverを入手します。Chromeを操作するのであれば、Selenium.Chrome.WebDriverを入手します。

ただし注意点があります。まずは失敗例から紹介します。

これでsourceを調べてみるとツイートは取得できていません。

下の方法であれば取得できます。5秒くらい待つのがポイントです。JavaScriptの読み込みに時間がかかっっているということなのでしょうか? 1秒ではダメです。5秒くらい待ちましょう。

HTMLを取得できたらあとはこれを解析してツイートを取得できます。HTMLを調べてみるとツイートは以下のようになっています。

長々と引用してしまいましたが、<span class=”css-901oao css-16my406 r-1tl8opc r-bcqeeo r-qvutc0″> の部分を抜き出せばツイートを取得することができそうなのですが、実はこの部分はツイート以外の部分もあるので、その親である <div dir=”auto” class=”css-901oao r-18jsvk2 r-1tl8opc r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-bnwqim r-qvutc0″ lang=”ja”> の部分を抜き出します。

以下のようにできれば簡単なのですが、FindElementsByClassNameメソッドの引数にスペースが入っているとエラーになるのでAngleSharpを使います。

AngleSharpならエラーが出ないので・・・