2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VBAでChromeスクレイピング② ー実践編ー

Last updated at Posted at 2022-12-14

これはVBAでChromeスクレイピングに挑戦してみた①の続きである。

①ではVBAでスクレイピングをするための準備を解説したが、ここでは実際にスクレイピングに挑戦したい。
まず、簡単なところでYahoo画面のトップニュースを利用し、それをスクレイピングしてみる。
image.png

Yahooスクレイピングのポイント

まず、Yahooをスクレイピングするためには「XPATH」を知る必要がある。

XPATHとは

XPath(XML Path Language)は、ツリー構造となっているXML/HTMLドキュメントから要素や属性などを指定するための決まった書き方(構文)。

そしてスクレイピングをするためには、このXPATHを検索し、ヒットしたらそこからブラウザ内のニュースを取得してExcelに出力する・・という流れでやっていくことになる。

XPATHの確認方法

  1. Yahooを開く
  2. ニュースの欄にマウスを置き、右クリックすると「検証」が出てくる
  3. 右側に検証画面が出てくるので、そこにあるニュースの部分を右クリックし「COPY XPATH」をクリック
  4. これでXPATHがコピーされる

実際の動きは以下GIFの通り。
2022-12-14_22h47_46-online-video-cutter.com.gif

そしてコピーされたXPATHはこちら。
//*[@id="tabpanelTopics1"]/div/div[1]/ul/li[1]/article/a/div/div/h1/span

これを使ってコーディングしていく。

コーディング

実際の画面は以下の通り。

image.png

まず、サイト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ニュースを取得しているということ。
image.png

結果

Yahoo画面
image.png

実際のスクレイピング結果
image.png

このように、きちんとスクレイピングされていることが分かる。

まとめ

このように、設定をきちんとしていればVBAでも色々とスクレイピングは可能だということが分かる。
今、スクレイピング=Pythonというイメージが強いが、実はそうでもないことが分かるし、
またVBAでスクレイピングできるということはその分VBAでスクレイピングしたデータを取得し、色々とデータ編集を行うなどの幅が広がるということにもなる。

これは一度やっておいて損はないかと思う。

それでは今回はここでおしまい。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?