ツイッターのアカウント名・プロフィール情報を抽出

こちらは、エクセルVBAでツイッターのアカウント名・プロフィール情報を抽出する方法についての解説となります。VBAの知識がない方や情報抽出ツールをお求めの方には、無償で提供していますので「ツイッターのアカウント名・プロフィール情報抽出ツール」よりダウンロードしてください。

前回は、ツイッターのプロフィール検索の自動化まで説明しました。
今回は、データを抽出する方法について解説していきます。

スポンサー リンク

ツイッターのアカウント名・プロフィール情報抽出のマクロ


#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If

Sub sample()

 Dim objIE As InternetExplorer

 'twproで検索
 Call ieView(objIE, "http://twpro.jp/")
 Call formText(objIE, "word", "有吉")
 Call tagClick(objIE, "input", "検索")

label01:

 If tagCheck(objIE, "a", "もっと見る") = True Then

  Call tagClick(objIE, "a", "もっと見る")
  Sleep 2000
  GoTo label01

 End If

 'アカウント名取得
 r = 2

 For Each objTag In objIE.document.getElementsByTagName("span")

  If InStr(objTag.outerHTML, "screen-name") > 0 Then

   Cells(r, 2) = Right(objTag.innerText, Len(objTag.innerText) - 2)
   r = r + 1

  End If

 Next

 'プロフィール情報取得
 r = maxRC("アカウント情報", 2)

 For i = 2 To r

  Call ieNavi(objIE, "http://twpro.jp/" & Cells(i, 2))

  For Each objTag In objIE.document.getElementsByTagName("div")

   If InStr(objTag.outerHTML, "class=""description") > 0 Then
    Cells(i, 3) = objTag.innerText
   End If

  Next

 Next i

End Sub

実行結果

ツイッター情報自動取得

それでは、データ抽出処理について見ていきましょう。


'アカウント名取得
r = 2

For Each objTag In objIE.document.getElementsByTagName("span")

 If InStr(objTag.outerHTML, "screen-name") > 0 Then

  Cells(r, 2) = Right(objTag.innerText, Len(objTag.innerText) - 2)
  r = r + 1

 End If

Next

まず、データを書き込む際の行をr=2で指定しています。
こちらは定数ではなく、データを書き込み毎に行番号が変わりますので変数で格納しています。

次に「getElementsByTagNameメソッド」を利用して、アカウント名を取得していきますが、その前にソースを確認してみましょう。


<div class="user">
<div class="face">
<img src="http://pbs.twimg.com/profile_images/489624026696802304/KnabLTvL_normal.jpeg" data-sn="ariyoshihiroiki">
</div>
<div class="main">
<div class="head">
<div class="menu">
<span class="badge">
<img src="/images/verified.png" width="16" height="16" alt="認証済みユーザです" title="認証済みユーザです">
</span>
<span class="actions empty" id="114446939">
<a class="follow" href="/home/follow/ariyoshihiroiki" target="_blank" rel="nofollow">フォローする</a>
</span>
</div>
<div class="meta">
<a href="/ariyoshihiroiki" target="_blank" name="ariyoshihiroiki">
<span class="name">有吉弘行</span>
<span class="screen-name"> @ariyoshihiroiki</span>
</a>
<span class="paren">[日本]</span>
<span>3292687人がフォロー</span>
</div>
</div>
<div class="body">穏やかに。。。</div>
</div>
<div class="clear"><!----></div>
</div>

こちらは1つのアカウント情報のソースになりますが、見て分かるようにほとんどがdivタグでくくられています。
divタグは多く利用されるタグであるため抽出する際には非常にやっかいなタグです。
今回はアカウント名とプロフィール内容の抽出ですが、アカウント名については、spanタグに「screen-name」の一意のキーワード(1アカウント内)があるので簡単に抽出できそうですが、プロフィールはdivタグ内に「body」があるもののdivタグを基準にしてしまうと、どの時点で抽出させるかが非常に困難です。
ですので、この場合は検索ページから抽出せずにアカウント詳細ページで取得するようにしましょう。

アカウント詳細ページとは検索画面のアカウントをクリックすると「http://twpro.jp/ariyoshihiroiki」のように「http://twpro.jp/」+ariyoshihiroiki(アカウント名)になっているのが分かります。
ということは、アカウント名が取得できれば、簡単に詳細ページを表示させることが可能ですね。
ここでは、まずアカウント名だけを抽出しています。


For Each objTag In objIE.document.getElementsByTagName("span")

 If InStr(objTag.outerHTML, "screen-name") > 0 Then

  Cells(r, 2) = Right(objTag.innerText, Len(objTag.innerText) - 2)
  r = r + 1

 End If

Next

まず「getElementsByTagNameメソッド」でspanを指定して全てのspan情報を抽出します。こちらを1つずつチェックしていきますが、spanタグに「screen-name」が含まれている場合は、アカウント情報が含まれていますのでCells(r, 2)にアカウント名を入力していきます。


Right(objTag.innerText, Len(objTag.innerText) - 2)
こちらはアカウント名を抽出している部分になりますが、objTag.innerTextだけで抽出した場合「 @ariyoshihiroiki」となり、前に半角スペースと@が含まれています。
こちらのアカウント名は後の詳細ページを表示させるために利用しますので、前の2つは邪魔となるため削除しています。


r = r + 1

こちらは、アカウント名が抽出できたら、次の行へ移動するためにr変数に1を加えています。
あとは、これらの処理を繰り返し全てのアカウント名を抽出したら完了となります。

ここまでがアカウント名の抽出になりますので、次はプロフィール情報の抽出を見ていきましょう。


'プロフィール情報取得
r = maxRC("アカウント情報", 2)

For i = 2 To r

 Call ieNavi(objIE, "http://twpro.jp/" & Cells(i, 2))

 For Each objTag In objIE.document.getElementsByTagName("div")

  If InStr(objTag.outerHTML, "class=""description") > 0 Then
   Cells(i, 3) = objTag.innerText
  End If

 Next

Next i

まず、データの数を調べるために最終行を取得する「maxRC」を利用して、「アカウント情報」シートの2列目(アカウント列)の最終行を取得しています。
データ数が分かったら、全てのデータを処理していくので「For~Nextステートメント」で全データの処理をします。
次に指定したURLを表示する「ieNavi」で「http://twpro.jp/」にアカウント名(Cells(i, 2))を結合させ、アカウントの詳細ページを表示させます。


<div class='user-desc'>
<div class='description'>穏やかに。。。</div>
</div>
(省略)
$(function(){
try{
/*
 * Decorate description
 */
$('.user .body').each(function(i, e){
 $(e).html($.twpro.filterDesc($(e).text()));
});

続いて実際に取得する処理ですが、「getElementsByTagNameメソッド」でdivを指定して全てのdiv情報を抽出します。
そして、divタグ内の一意のキーワードですが、最初に「description」で処理しようと思ったら、他のdivタグにも存在していたので、classまであわせて「class=""description」を一意のキーワードとしました。

条件が決定したので処理をするとdivタグに「class=""description」が含まれている場合は、プロフィール情報が含まれていますのでCells(i, 3)にプロフィール情報を入力していきます。

あとは、全てのアカウントを処理したら終了となります。
マクロを見てお分かりかと思いますが、サブルーチンが非常に活躍していますね。
サブルーチンを利用すると時間短縮やソースも解読しやすくなりますので是非活用しましょう。

次の記事: VBAのIE操作でツイッターのツイート数・フォロー数・フォロワー数の自動取得 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。