こんにちは!あつもり(@atumori17)です。
VBScriptでIEを操作してWEBスクレイピング!の第5回目で~す。
前回はブラウザの読み込み待ちをしてエラーを回避する方法を紹介しました。
前回は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
プログラムコードの解説
全体の流れは以下のようになります。
- IEでページを開く
- IEの読み込み待ちをする
- リンク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を指定することができます。
ダブルクォーテーションで囲まれているのがリンク参照先のURLになります。今回のプログラムはこのhref属性の値を取得してテキストファイルに書き出していきます。
リンクURLを取得する
それではページ全体のリンクURLを取得していきます。
Linksプロパティでページ全体のa要素を取得する
とすることでページ全体のa要素を取得することができます。この取得したa要素をコレクションといいます。
コレクションはページ内のa要素がまとまって入っているため、1つ1つの要素にバラしてあげないと使えません。
For each文でコレクションから1つ1つの要素を抜き出す
ではどうしたらコレクション内の各要素をバラすことができるんでしょう?それにはFor eachステートメントを使います。下記のようにすることでコレクションの中の要素の数だけループさせることができます。
処理
next
今回のプログラムコードでは、ページ全体のa要素の数だけループしていることになります。上のコードで17~20行目の部分です。
For each objLink In objIE.document.Links OutputText objLink.href next
そして1つずつ取り出したa要素からリンク参照先のURLを取得します。
オブジェクト変数に入っている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スクレイピングが可能です。 これで日々の情報収集はダブルクリック一発で完了させましょう!- VBScriptでInternet Explorerを使って複数WEBサイトをダブルクリック一発で開く方法
- VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
- VBScriptでWEBスクレイピング!HTMLドキュメントとタイトルを取得する方法
- VBScriptでWEBスクレイピング!ブラウザの読み込み待ちをしてエラーを回避する
- VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法
- VBScriptでWEBスクレイピング!aタグのリンクURLをHTMLとして書き出す
- VBScriptでWEBスクレイピング!hタグを取得してHTMLとして書き出す
- VBScriptでWEBスクレイピング!テーブル要素を取得してCSVファイルで書き出す
- VBScriptでWEBスクレイピング!アメブロの管理画面に自動でログインする方法
- VBScriptでWEBスクレイピング!アメブロの投稿記事一覧をテキストファイルに書き出す方法