パソコン・ガジェット

【Webスクレイピング入門】阿部寛のホームページの情報をExcelVBAで取得してみよう

本記事の内容

Webサイトに記載されている情報を、Excelに自動で転記したい!」

だけどやり方がわからない!」という方に向けた記事です。

Webスクレイピングとは?

「Webスクレイピング」とは、Webサイトに記載されているデータを取得することを指します。

「画像」「テキスト」「リンク先のURL」です。

これらのデータは手動でも取得可能です。しかし取得するデータが膨大にある場合はどうでしょう。

仮にリンクの数が100000個とかになったら、もはや手動で作業するわけにはいきません。

そこでプログラミングの登場です。プログラムを書けば、膨大なデータも短時間で自動取得できます。

「Webスクレイピング」という単語は、専ら「プログラミングでWeb情報を自動取得する」ことを指します。

余談

Webスクレイピングは主にAI界隈で多用される技術です。WebスクレイピングでAIモデリングの構築に必要なデータを収集します。

AIに限らず、業務でWebの情報をExcelに転記する作業を行ってる人は、こちらの記事を活用してみてください。

Webスクレイピングの手段

今回はExcelVBAを使ったWebスクレイピングの手法を紹介します。

Webスクレイピングの手段は他にも数多くあります。最も有名なのがPythonです。

ただしPythonを使う場合、PCにPythonをインストールする必要があります。

でも会社のPCって、個人利用目的のソフトインストールが禁止されてる場合が多いです。もっと普遍的なツールがいい。

阿部寛さんのホームページをWebスクレイピングしてみよう!

今回Webスクレイピングする対象サイトは「阿部寛のホームページ」です。

理由は2つあります。

  • サイトの容量が軽い
  • HTMLのコードが簡易で見やすく、練習サイトにうってつけ

補足

阿部寛さんのHPは、そのあまりのシンプルさで一躍有名になりました。(Wikipediaにページが作られるほど)

ご覧の通り、一昔前のテキストサイトを彷彿させるデザインです。

サイトの容量も当然小さく、リンクをクリックした途端に爆速で開きます。

  • 「スマホが速度制限に掛かっても余裕で開く」
  • 「コードが簡易で見やすいから、HTMLの写経練習になる」
  • 「仮想環境のテストページに最適」

など、もはや阿部寛さんご本人のプロモーション以上の需要が見込まれています。

コバンダムでも、Webスクレイピング対象として活用させていただきます。

スクレイピングする内容

阿部寛のホームページ」 内のリンクと、リンク先URLを取得し、Excelに転記します。

阿部寛の出演予定作品を表にできます。やったね!

今回使ったコード

Sub testIE()

Dim objIE As InternetExplorer 'IEオブジェクトを準備
Dim objTag As Object
Dim objFrame As Object

Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット

objIE.Visible = True 'IEを表示

objIE.navigate "http://abehiroshi.la.coocan.jp/" 'IEでURLを開く

Call WaitResponse(objIE) '読み込み待ち

Set objFrame = objIE.document.frames

Dim Row As Long, Col As Long 'シートに記述するための変数 Raw:行 col:列

Raw = 1 ' 1 : 1行目に表示
Col = 3 ' 3 : C列に表示

For Each objTag In objFrame("right").document.getElementsByTagName("a")
     
    Cells(Raw, Col) = objTag.outerText 'リンク名の一覧を表示
    Cells(Raw, Col + 1) = objTag.href  'リンク先のURLを表示
    
    With ActiveSheet
    .Hyperlinks.Add Anchor:=Cells(Raw, Col), Address:=Cells(Raw, Col + 1).Value
    'リンク名に対応するハイパーリンクを貼り付ける
    End With

    Raw = Raw + 1

Next

End Sub

Sub WaitResponse(objIE As Object)
    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
        DoEvents
    Loop
End Sub

想定される出力結果

上記のコードをVBAに貼り付けてマクロを起動します。

するとC列、D列に以下の通りリンクとURLが転記されます。

C列D列
プロフィールhttp://abehiroshi.la.coocan.jp/prof/prof.htm
shigeta@navy.plala.or.jpmailto:shigeta@navy.plala.or.jp
2023年 大河ドラマ(第62作)https://www6.nhk.or.jp/nhkpr/post/original.html?i=31903
「DCU」https://www.tbs.co.jp/DCU_japan/
夕霧花園http://yuugiri-kaen.com/
護られなかった者たちへhttps://movies.shochiku.co.jp/mamorare/
「HOKUSAI」http://www.hokusai2020.com/
とんびhttps://movies.kadokawa.co.jp/tonbi/
異動辞令は音楽隊!https://gaga.ne.jp/ongakutai/

このVBAを起動すれば、いつでもどこでも阿部寛の出演作品が瞬時に確認できます。

コードの流れ

流れを大まかに言うとこんな感じ

  1. オブジェクト変数の宣言
  2. 「阿部寛のホームページ」へブラウジング
  3. 「阿部寛のホームページ」からホームページの情報を読み取り、オブジェクト変数に格納する
  4. オブジェクト変数から、リンク先の情報(ここでは出演映画)を抜き取る。
  5. 出演映画一覧をExcelのシートへ転記する

注意

阿部寛のホームページは、昔ながらのフレーム形式を採用しています。

この形式の場合、スクレイピング方法に注意が必要です。

「阿部寛のホームページ」はフレーム形式。
フレーム名は「left」、「right」です。

詳しくは手順③で出てきますが、情報を転記するときにフレームを指定する必要があります。

出演作品名は「right」のフレームに書いてあるので、コードも「right」フレームを指定します。

手順①:オブジェクト変数の宣言

Dim objIE As InternetExplorer 'IEオブジェクトを準備

Dim objTag As Object
Dim objFrame As Object

objIE:IEでブラウジングするために必要な変数。

objTag:読み込んだHPの情報を格納するための変数。

objFrame:フレーム形式のHPの場合に必要。対象のフレームの情報を代入する。

手順②: 「阿部寛のホームページ」へブラウジング

Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット

objIE.Visible = True 'IEを表示

objIE.navigate "http://abehiroshi.la.coocan.jp/" 'IEでURLを開く

Call WaitResponse(objIE) '読み込み待ち

Set objFrame = objIE.document.frames

コード解説
Set objIE = CreateObject("Internetexplorer.Application")これでIEへのブラウジングが可能になる
objIE.Visible = True IEでブラウジングする様子が見えるようになる
objIE.navigate "http://abehiroshi.la.coocan.jp/" 対象のURLへブラウジングする
Call WaitResponse(objIE) URLへのフラウジングが終わるまでに待機
Set objFrame = objIE.document.frames ホームページ内のフレーム構成の情報を代入する

手順③: 阿部寛のホームページの内容をExcelへ転記

Dim Row As Long, Col As Long 'シートに記述するための変数 Raw:行 col:列

Raw = 1 ' 1 : 1行目に表示
Col = 3 ' 3 : C列に表示

For Each objTag In objFrame("right").document.getElementsByTagName("a") 'rightフレームのaタグを全て抜き出し
     
    Cells(Raw, Col) = objTag.outerText 'リンク名の一覧を表示
    Cells(Raw, Col + 1) = objTag.href  'リンク先のURLを表示
    
    With ActiveSheet
    .Hyperlinks.Add Anchor:=Cells(Raw, Col), Address:=Cells(Raw, Col + 1).Value
    'リンク名に対応するハイパーリンクを貼り付ける
    End With

    Raw = Raw + 1

Next

End Sub
コード解説
Dim Row As Long, Col As Long 行、列の数値を代入する変数を宣言
Raw = 1
Col = 3
行、列の番号を指定する(ここではC列の1行目を指定する)
For Each objTag In objFrame("right").document.getElementsByTagName("a") objFrameに代入されているHPの情報(rightフレームの情報)の中から、
aタグが付いてるものが見つかり次第処理をする。
Cells(Raw, Col) = objTag.outerText 'リンク名の一覧を表示 C列1行目以降にリンク名を貼り付ける
Cells(Raw, Col + 1) = objTag.href 'リンク先のURLを表示 D列1行目以降にリンク先のURLを貼り付ける
With ActiveSheet
.Hyperlinks.Add Anchor:=Cells(Raw, Col), Address:=Cells(Raw, Col + 1).Value
End With
C列のリンク名にハイパーリンクを貼り付ける処理

スクレイピングは書き方がほぼ決まっている

VBAのWebスクレイピングは書き方がほとんど決まっています。

序盤のオブジェクト変数を宣言したり、対象URLへnavigateする手順は他のプログラムでもそのまま使えます。

  • この記事を書いた人

こばやし秀介

■死んだ目をしながら労働する子供部屋おじさん
■ Fラン卒・友人ゼロ・底辺エンジニア社畜
■こどおじの生活様式を記した雑記記事を随時公開中
■Youtubeでも生活様式を配信!

ご登録よろしくお願いします!

-パソコン・ガジェット