VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法


こんにちは!あつもり(@atumori17)です。

VBScriptでIEを操作してWEBスクレイピング!の第5回目で~す。
前回はブラウザの読み込み待ちをしてエラーを回避する方法を紹介しました。

VBScriptでWEBスクレイピング!ブラウザの読み込み待ちをしてエラーを回避する
IEのページ読み込み待ちしてHTMLドキュメントからWEBサイトのタイトル名を取得する方法をご紹介します。面倒なようですがWEBスクレイピングはIEがページ全体を読みむまで待ってあげてから、データを取得するという手順を踏まなければならないからです。

前回はWEBページのタイトル名を取得してテキストファイルに書き出すところまでやりましたが、今回はページ内にあるリンクURLを全て取得してテキストファイルに書き出す方法を紹介します。

イメージとしてはこんな感じです。

スポンサーリンク

aタグのリンクURLを全部取得するスクリプト

テキストエディタ開き下記のコードを入力します。全て入力し終わったら「リンクURL取得.vbs」のファイル名でデスクトップに保存します。

Option Explicit

    Dim objIE
    Dim objLink

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    'IEを開く
    objIE.navigate "https://tonari-it.com/"
    
    'ページが読み込まれるまで待つ
    Do While objIE.Busy = True Or objIE.readyState <> 4
        WScript.Sleep 100        
    Loop    
    
    'Aタグを取得してテキストファイルに書き出す
    For each objLink In objIE.document.Links
        OutputText objLink.href         
    next 

'テキストファイルへ出力
Function OutputText(ByVal strMsg)

    Dim objFSO
    Dim objText

    'ファイルシステムオブジェクト
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    'テキストファイルを開く
    Set objText = objFSO.OpenTextFile("link.txt", 8, true)

    objText.write strMsg    
    objText.write vbCrLf

    objText.close
    
    'オブジェクト変数をクリア
    Set objFSO = Nothing
    Set objText = Nothing 

End Function

プログラムコードの解説

全体の流れは以下のようになります。

  1. IEでページを開く
  2. IEの読み込み待ちをする
  3. リンクURLを取得してテキストファイルに書きだす

1~2までは前回ご説明したタイトル名を取得する流れと同じです。今回はページ内にある全てのリンクURLをテキストファイルに書き出します。

 

HTMLのaタグについて

コードの説明に入る前にaタグついて説明しておきたいと思います。まずは下の画像を見てください。

 

赤枠で囲まれた部分がリンクですが、HTMLでページにリンクを置きたいときは次のようにコードを書きます。

<a href="https://tonari-it.com/category/startup-freelance/">起業・フリーランス</a>

aタグで囲まれた文字がリンクです。このリンクをクリックすると別のページにジャンプするというわけですね。

上記のコード、<タグ>要素内容<タグ>を全てひっくるめて要素といいます。この要素という単語は後で出てくるので覚えておきましょう。

aタグとはHTMLのタグの1つで、リンクを表すタグということなんですね。ちなみにaタグのaはAnchor(アンカー)の略です。

aタグでhref属性を指定する

aタグでhref属性を指定するとリンク参照先のURLを指定することができます

href = “URL

ダブルクォーテーションで囲まれているのがリンク参照先のURLになります。今回のプログラムはこのhref属性の値を取得してテキストファイルに書き出していきます。

 

リンクURLを取得する

それではページ全体のリンクURLを取得していきます。

Linksプロパティでページ全体のa要素を取得する

htmlドキュメント.Links

とすることでページ全体のa要素を取得することができます。この取得したa要素をコレクションといいます。

コレクションはページ内のa要素がまとまって入っているため、1つ1つの要素にバラしてあげないと使えません。

For each文でコレクションから1つ1つの要素を抜き出す

ではどうしたらコレクション内の各要素をバラすことができるんでしょう?それにはFor eachステートメントを使います。下記のようにすることでコレクションの中の要素の数だけループさせることができます。

For each オブジェクト変数 In コレクション
処理
next

 

今回のプログラムコードでは、ページ全体のa要素の数だけループしていることになります。上のコードで17~20行目の部分です。

For each objLink In objIE.document.Links    
  OutputText objLink.href           
next

 

そして1つずつ取り出したa要素からリンク参照先のURLを取得します。

オブジェクト変数.href

オブジェクト変数に入っているa要素にhref属性を指定することでリンク参照先のURLが取得できます。

実際には「https://tonari-it.com/category/startup-freelance/」のようなURLの文字列になります。

プログラムコードの解説は以上です。

アプリケーションを実行してみる

では実際に起動してみます。デスクトップにある「リンクURL取得.vbs」をダブルクリックして起動します。はたして無事にリンクURLを書き出すことができるでしょうか?ハラハラしますね~。

デスクトップに「link.txt」ができました。

「link.txt」を開くとページ内にあるリンクURLが書かれています。無事成功しましたっ!

まとめ

いかかでしたか?今回の内容をまとめると以下のようになります。

  • aタグとはHTMLのタグの1つでリンクを表すタグです
  • ページ全体のa要素を取得するにはLinksプロパティを使う
  • For each文でコレクションから1つ1つの要素を抜き出す

今回は以上です。それではお疲れさまでした~。

連載目次:VBScriptでお手軽WEBスクレイピング

Windowsを操作できるプログラミング言語「VBScript」を使えば、InternetExplorerを操作してWEBスクレイピングが可能です。 これで日々の情報収集はダブルクリック一発で完了させましょう!
  1. VBScriptでInternet Explorerを使って複数WEBサイトをダブルクリック一発で開く方法
  2. VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
  3. VBScriptでWEBスクレイピング!HTMLドキュメントとタイトルを取得する方法
  4. VBScriptでWEBスクレイピング!ブラウザの読み込み待ちをしてエラーを回避する
  5. VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法
  6. VBScriptでWEBスクレイピング!aタグのリンクURLをHTMLとして書き出す
  7. VBScriptでWEBスクレイピング!hタグを取得してHTMLとして書き出す
  8. VBScriptでWEBスクレイピング!テーブル要素を取得してCSVファイルで書き出す
  9. VBScriptでWEBスクレイピング!アメブロの管理画面に自動でログインする方法
  10. VBScriptでWEBスクレイピング!アメブロの投稿記事一覧をテキストファイルに書き出す方法

タイトルとURLをコピーしました