【エクセルVBAでIE操作】ページをクロールしてブログの記事一覧を取得する方法

★気に入ったらシェアをお願いします!


list

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAでInterneteExplorer(IE)を操作するシリーズです。

前回はこちらの記事でIEを操作して、WEBページ内の検索窓でキーワード検索をする方法についてお伝えしました。

【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
初心者向けエクセルVBAでIEを操作するシリーズです。今回はIEを操作してWEBページ内の検索窓に任意のキーワードを入力して送信する方法をお伝えします。GoogleChromeの検証機能も活用しますよ!

今回から何回かにわたって、ブログサイトの記事一覧をWEBスクレイピングで取得する方法についてお伝えしたいと思います。

まずはトップページの記事一覧から記事タイトルとそのURLを取得していきたいと思います。

よろしくお願いいたします!

Google Chromeの検証で各記事のタイトルとURLを取得する作戦を練る

お題は引き続き当ブログ「いつも隣にITのお仕事」です。

WordPressで作成されていましてテーマはSimplicityを使用しています。

Simplicityはブログ向けのテーマということで、トップページに新しい順に記事の一覧が掲載されますので、そこをうまいことクロールして記事タイトルとそのURLを取得していきたいと思います。

今回もWEBスクレイピングの強い味方、Google Chromeの検証を使ってどのようにスクレイピングするか作戦を練りましょう。

ショートカットキーは Ctrl + Shift + I ですね。

GoogleChromeの検証で記事リストの要素を確認する

ちょうど記事一覧の箇所は「id=”list”」のdivタグで囲まれていますので、まずこれを掴むのが良いですね。

このdivタグを展開してみてみますと…

おおお…、(一部省略しているにも関わらず)けっこう複雑ですね。

ただこの「id=”list”」のdivタグのすぐ直下にある「id=”post-XXXX”」のdivタグが各記事を囲っているようですよ。

検証で記事ごとのdiv要素を確認する

では、まずそれを実証していきましょう。

Childrenで直下の子要素のコレクションの数を調べる

こんなプログラムを作ってみました。

まず、19行目で「id=”list”」のdiv要素をelListとして取得します。

次に新しい命令ですが

オブジェクト変数.Children

これであるオブジェクト変数に格納されている要素の直下の子要素をコレクションで取得することができます。

22行目で、elListの直下の子要素のコレクションをcolDivに格納しています。

Lengthメソッドでコレクションの要素数を取得できます。

トップページに掲載されている記事数は20記事ですので、この要素数が20になればバッチリなんですが…実行してみましょう。

Childrenメソッドによるコレクションの要素数を表示

…22。惜しい。

2つほど記事以外を囲む要素も含まれているようです。

特定のIDを持つ要素にのみ処理を実行する

不要な要素を探してみると

検証で広告のdiv要素を確認

ここに広告を囲うdivタグがありました。

また、一番下のほうに

という謎のdivタグもありました。

いずれもdivタグにも、記事のdivタグに共通して存在している「id=”post-XXXX”」という属性が付与されていませんので、これを条件にすれば記事を囲むdiv要素に限って処理ができそうですね。

オブジェクト変数.ID

これにてHTML要素のID属性を取得できますので、これを条件としたIf文を使えば記事を囲うdiv要素にのみ処理が可能になります。

掴むのが簡単な要素を探して取得する

続いて各記事のdiv要素から記事タイトルとURLを取得する方法について考えてみます。

冒頭の通り、このdiv要素だけでもかなり複雑なのですが、こういうケースではその要素内で一つしか登場しないタグやクラスを探したりするのが良いです。

例えば

などですね。このdiv要素の中にh2要素は1つしかありませんので、”掴む”のが簡単なのです。

しかも都合の良いことに、このh2要素内に記事タイトルもURLも含まれています。

ということで、上記プログラムの「’ここから~’ここまで」を以下のようにしてみました。

8行目~10行目で

  • 各記事を囲むdiv要素から1つ目のh2要素を取得
  • h2要素内のテキストを表示
  • h2要素の配下の1つ目のa要素のhrefを表示

を行います。

これを実行しますと

記事一覧をイミディエイトウィンドウに出力

ちょっと見づらいは見づらいですが、無事に記事タイトルとそのURLを表示することができました。

まとめ

VBAでIEを操作してWEBページ上に表示されている記事一覧から記事タイトルとURLを取得することができました。

もうなんとなくおわかりだと思いますが、検証で目的のモノを取得できることが見いだせたのであれば、もうプログラムの大方は出来上がったと言っても良いです。

その際に

  • 1つしか存在しないidを取得する
  • 対象内にただ1つしかないタグやクラスを探す
  • Childrenを使って直下の子要素をコレクションで取得する

などのテクニックを覚えておいて、ケースバイケースで使えると良いですね。

次回は続きになりますが、せっかくなので記事公開日やカテゴリなども取得してみたいと思います。

【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
初心者向けエクセルVBAでInternete Explorerを操作するシリーズです。今回は記事タイトル、URLに加えて、公開日とカテゴリも取得することで、別のスクレイピングのパターンを練習します。

どうぞお楽しみに!

連載目次:エクセルVBAをIEを操作してWEBスクレイピング

IEを操作してWEBページのデータを取得して、エクセルのデータとして取り込む、つまりWEBスクレイピングをエクセルVBAで実現します。各種WEBページを課題として様々なデータの取得の仕方を解説していきたいと思います。
  1. 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
  2. 【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
  3. 【エクセルVBAでIE操作】ブラウザの読み込み待ちをしないとダメなのです
  4. 【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
  5. 【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
  6. 【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
  7. 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
  8. 【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
  9. 【エクセルVBAでIE操作】ページをクロールしてブログの記事一覧を取得する方法
  10. 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
  11. 【エクセルVBAでIE操作】ページャーを最後のページまでどんどんリンクする
  12. 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする

連載目次:データ一覧から請求書を自動で作る

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  3. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  4. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  5. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  6. 【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し
  7. 【初心者向けエクセルVBA】InputBoxでの日付入力と月末日の自動算出
  8. 【初心者向けエクセルVBA】Worksheetのコピーを活用して複数の請求書を作る
  9. 【初心者向けエクセルVBA】ファイルのコピーを使って取引先別の請求書を作る
  10. エクセルVBAでDateAdd関数を使って年月を条件としてSumIfs関数を使う方法
  11. 宣言もセットも不要!エクセルVBAでワークシートをオブジェクト名で取り扱う方法
  12. エクセルVBAでシートの列の挿入も簡単に対応できちゃう列挙体の使い方