LoginSignup
5
7

More than 1 year has passed since last update.

Excel VBAでSelenium無しのシンプルなWebスクレイピング。WebDriverも無し。

Last updated at Posted at 2022-06-09

やりたいこと

VBAを使って、Web上のテキスト情報を取得してExcelのセルにコピペしたいが、
Seleniumも、WebDriverも使わずに、てっとり早くやりたい。

この記事をさらにシンプルした手法になります。(その分やれることも少ないです)
https://qiita.com/uezo/items/66e20b064ffd5f239b9a

やったこと

URLを指定すると、その下にURLのHTMLソースをとってくるVBAができました。
画像はサンプルで、Yahooファイナンストヨタの株価ページ
https://finance.yahoo.co.jp/quote/7203.T
image.png

VBAコード

コードはたったの40行です。

Sub ソース取得実行()

    'urlと貼り付け先を取得
    url = "https://finance.yahoo.co.jp/quote/7203.T"
    Set target = Cells(3, 1)
    
    '前回の結果を削除する
    Range(target, Cells(Rows.Count, target.Column).End(xlUp).Offset(1)).Clear
    
    res = ソース取得(url)
    
    'セルに転記する
    'セルの最大文字数を考慮して<span>タグで改行するようにする
    res = Replace(res, "<span", vbLf & "<span")
    '改行で分けて配列化する
    arr = Split(res, vbLf)
    '配列をセル範囲に一気に貼る。セルループするととても遅い。
    target.Resize(UBound(arr) + 1, 1).Value = Application.Transpose(arr)
    
End Sub

Function ソース取得(url)

    'ソースを取得
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", url
        .Send
        buf = .responseBody
        
        'ソースを日本語に直す(.responseTextだとエラーが出ることがたまにある)
        With CreateObject("ADODB.Stream")
            .Open
            .Type = 1
            .Write buf
            .Position = 0
            .Type = 2
            .Charset = "utf-8"
'            .Charset = "shift_jis" '文字化けするときは"shift_jis"を試す
            ソース取得 = .ReadText
        End With
    End With

End Function

参考サイト

バイナリ(ResponseBody)で結果を受け取って、Streamオブジェクトで適当に文字コードを変換してはいかがでしょうか。

5
7
0

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
5
7