今回もSeleniumを使います。NuGetでSelenium.WebDriverとSelenium.Support、そして操作したいブラウザのDriverをインストールします。今回はChromeを操作するのでSelenium.Chrome.WebDriverをインストールします。

またHTMLを解析するためにAngleSharpが必要なのでNuGetでインストールしておきましょう。

Twitterで「プログラミング」と検索してみます。HTMLがどのようになっているかみてみましょう。

検索結果に出てくるリンクをみてみると以下のようになっています。a タグで class が”css-4rbku5 css-18t94o4 css-1dbjc4n r-1loqt21 r-1wbh5a2 r-dnmrzs r-1ny4l3l”になっているものを抽出すればよいということがわかります。相対urlになっているので先頭に”https://twitter.com”を追加すればリンクを取得できます。

そこで検索結果からアカウントへのリンクであれば、これで取得できます。

ではフォロワー数が多いアカウントに絞って出力することはできないのでしょうか?

実際に上記の方法で取得できたアカウントに実際にアクセスすればフォロワー数が表示されているので取得できるはずです。ほかにも総ツイート数やアカウント名も取得してみましょう。

アカウント名の部分は以下のようになっています。まず <div class=”css-1dbjc4n r-6gpygo r-14gqq1x”> を取得して、そのなかの <div class=”css-901oao r-18jsvk2 r-1tl8opc r-1b6yd1w r-1vr29t4 r-ad9z0x r-bcqeeo r-qvutc0″> となっている部分と <div class=”css-901oao css-bfa6kz r-m0bqgq r-18u37iz r-1qd0xha r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-qvutc0″> となっている部分を抜き出せばアカウント名を取得することができます。

フォロー数とフォロワー数は以下のようになっています。<div class=”css-901oao css-16my406 r-18jsvk2 r-1tl8opc r-b88u0q r-bcqeeo r-qvutc0″> の部分で最初がフォロー数で二番目がフォロワー数です。

総ツイートは以下のようになっています。この部分を抜き出せばよいということになります。

ではさっそく作成してみましょう。

まずアプリが起動したらChromeDriverをふたつ生成します。ひとつは検索結果からアカウントへのリンクを取得するためのもので、もうひとつはアカウントにアクセスしてフォロワー数などを調べるためのものです。

コンストラクタに渡す引数は同じだからと以下のようにしてしまうと、アプリケーションが終了した後もchromedriverのプロセスが残ってしまいます。

処理がどこまで進行しているのかわかるようにプログレスバーを表示させています。

GetAccountInfo(string accountUrl)メソッドは各アカウントに実際にアクセスしてアカウント情報を取得するメソッドです。

実際に取得された情報はAccountInfoクラスに格納されます。10,000を超えると11,000なら「1.1万」と表示されるので数値に変換するためのプロパティを作成しています。

検索したい単語を入力してボタンをおすと処理が開始されます。

以下は取得されたAccountInfoのリストをexcelファイルとして保存するためのメソッドです。

最後に終了時の処理です。