これはVBAでChromeスクレイピングに挑戦してみた①の続きである。
①ではVBAでスクレイピングをするための準備を解説したが、ここでは実際にスクレイピングに挑戦したい。
まず、簡単なところでYahoo画面のトップニュースを利用し、それをスクレイピングしてみる。
Yahooスクレイピングのポイント
まず、Yahooをスクレイピングするためには「XPATH」を知る必要がある。
XPATHとは
XPath(XML Path Language)は、ツリー構造となっているXML/HTMLドキュメントから要素や属性などを指定するための決まった書き方(構文)。
そしてスクレイピングをするためには、このXPATHを検索し、ヒットしたらそこからブラウザ内のニュースを取得してExcelに出力する・・という流れでやっていくことになる。
XPATHの確認方法
- Yahooを開く
- ニュースの欄にマウスを置き、右クリックすると「検証」が出てくる
- 右側に検証画面が出てくるので、そこにあるニュースの部分を右クリックし「COPY XPATH」をクリック
- これでXPATHがコピーされる
そしてコピーされたXPATHはこちら。
//*[@id="tabpanelTopics1"]/div/div[1]/ul/li[1]/article/a/div/div/h1/span
これを使ってコーディングしていく。
コーディング
実際の画面は以下の通り。
まず、サイトURL(ここではYahoo)を枠内に入力し、ボタンを押すという動きを実現させる。
そしてボタンを押した後の実際のコードは以下の通り。
Option Explicit
Sub site_open()
Dim driver As New Selenium.ChromeDriver 'Selenium制御
Dim myBy As New By
Dim siteURL As String
Dim ws As Worksheet
Dim ws_Tenki As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
siteURL = ws.Range("C4").Value
If siteURL <> "" Then
'ブラウザ立ち上げ時の設定
driver.AddArgument "disable-gpu"
driver.AddArgument "start-maximized"
'SeleniumでChromeを使用する初期設定
Call driver.Start("chrome")
driver.Get (siteURL)
Set ws_Tenki = ThisWorkbook.Worksheets("転記データ")
'Excelに転記する(Yahooの場合TOPニュース件数は8件なので8行転記)
For i = 1 To 8
ws_Tenki.Range("A" & (i + 1)) = driver.FindElementByXPath("//*[@id=""tabpanelTopics1""]/div/div[1]/ul/li[" & i & "]/article/a/div/div/h1/span").Text
Next i
'終了メッセージ
MsgBox "終了しました"
Else
MsgBox "サイトURLがありません"
End If
End Sub
コードをよく見ると、以下の部分で先ほど取得したXPATHが使われていることが分かる。
ここでXPATHを使ってYahooニュースを取得しているということ。
結果
このように、きちんとスクレイピングされていることが分かる。
まとめ
このように、設定をきちんとしていればVBAでも色々とスクレイピングは可能だということが分かる。
今、スクレイピング=Pythonというイメージが強いが、実はそうでもないことが分かるし、
またVBAでスクレイピングできるということはその分VBAでスクレイピングしたデータを取得し、色々とデータ編集を行うなどの幅が広がるということにもなる。
これは一度やっておいて損はないかと思う。
それでは今回はここでおしまい。