【エクセルVBAでIE操作】ページャーを最後のページまでどんどんリンクする

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


page

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

エクセルVBAでInterneteExplorer(IE)を操作する初心者向けのシリーズですが、なんともう11回目になりました。

前回はこちらの記事。

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

このブログのトップページの記事一覧から

  • 記事タイトル
  • URL
  • 公開日
  • カテゴリ

をリストアップするプログラムを作成しました。

ですが実際は記事一覧はページャーによって複数のページにわたって掲載されています。

次のページも自動でクロールしたいですよね…

そんな悩みを解決すべく、今回はページャーを最後のページまで自動で移動するプログラムをご紹介します。

スポンサーリンク

ページャーがどのように構成されているか検証をする

このブログはWordPressでできていまして、テーマはSimplicityを使っています。

Simplicityの記事一覧(インデックスリストといいます)において、ページャーがどのように構成されているか、Google Chromの検証機能で調べていきたいと思います。

次のページへのアンカーリンクを探す

まず、1ページ目のページャーですが

Google Chromeで1ページ目のページャーを検証
ここにありました。

class=”pagination”が付与されているul要素ですね。

各ページともclass=”pagination”が付与されているのは、ページャーだけですので

で、つかむことができそうです。

この要素のouterHTMLをコピーして見てみますと

と、左から順番にli要素で並んでいるようですね。

最後から二つ目の、class=”next”のli要素配下のアンカーが

href=”http://tonari-it.com/page/2/”

となっています。現在のページ数が1ですから、次のページは「~/page/2」ということですね。

これを踏んでいけば、次ページにどんどん行ってくれそうな気がしますね。

最後のページであることを判別するためのルールを見つける

最後のページに行ったときには、プログラムを終了しなければいけません。

最後のページである13ページ目のページャーがどのように構成されているか、検証で見てみましょう。

Google Chromeで最後のページのページャーを検証

ここにあります。同じくclass=”pagination”のul要素です。

このouterHTMLも見てみましょう。

最後から二つ目の、class=”next”のli要素配下のアンカーがどうなっているかというと

href=”http://tonari-it.com/page/13/”

となっています。

現在は13ページ目ですが、ここも「~/page/13/」となっています。

どうやら最後のページの場合は、現在のページ数と、class=”next”配下のアンカーの番号が等しくなるようです。

これを条件にストップしてあげればちゃんと止まってくれそうですね。

ページャーを順番にリンクしていくVBAプログラム

この検証を元に、プログラムを組んでみました。

こちらです。

Do Whileで最後のページになるまで繰り返す

27行目のDo Whileですが、現在のページ数iと次のページ数noNextが等しくない間のみ繰り返しをします。

iは繰り返しに入るたびに1ずつ加算されます。

noNextはページャー内のclass=”next”のli要素配下のアンカーリンクから抜き出してきた番号で、ここについては後ほど解説をします。

最後のページに到達した場合は、iとnoNextが両方とも13になり等しくなりますので、繰り返しに入らなくなります。

li要素の直下のhref属性からページ番号を取得する

40行目はいくつもの命令が組み合わさっていますが、まず

で、class=”next”の1つ目のli要素を取得します。

により、そのli要素の直下の子要素であるa要素を取得

により、そのa要素のhref属性を取得ということになります。

Replace関数で”http://tonari-it.com/page/”を削除していますので、例えば3ページ目であれば、strTempは”3/”となります。

次に42行目の

で、strTmpの長さより1少ない文字数分をLeftで切り出しますので、最後の”/”だけ取り除かれ、noNextは3となります。

実行結果

このプログラムを実行すると

ページャーをクロールして各ページのタイトルを表示

と、ページャーをクロールしてすべてのページのタイトルがイミディエイトウィンドウに出力されます。

今回は、ページタイトルを表示するだけですが、このプログラムの35行目

の箇所に各ページで実行したい処理を入れればOKですね。

まとめ

以上、エクセルVBAでIEを操作してページャーを最後までクロールする方法についてお伝えしました。

ページャーの作りは各サイトで異なると思いますので、それぞれの構成を検証する必要がありますが、ページャーでのクロールが実現できるとスクレイピングの効率が爆発的に上がります。

ぜひ色々なパターンについて検証と実践を繰り返して、実力を上げていって頂ければと思います。

次回は、フォームにユーザー名、パスワードを入力してログインをする方法をお伝えできればと思います。

【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする
エクセルVBAでInternet Explorerを操作する初心者向けのシリーズ。今回はエクセルVBAでIEを操作してフォームにユーザー名とパスワードを入力してログインをする方法についてお伝えします。

どうぞお楽しみに!

連載目次:エクセル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でInterneteExplorer(IE)を操作する初心者向けのシリーズ」
    を拝見し、VBAの勉強をさせていただいております。
    気が付いたのですが、
    http://tonari-it.com/vba-ie-pagenation/
    の例題が壊れているようです。
    以前に拝見した時は壊れていませんでした。
    とりあえずお知らせしておきます。
    以上です。