- ベストアンサー
[VBA]WEBページのリンク先情報を取得する方法
- VBAを使用してWEBページからリンク先の情報を取得する方法について教えてください。
- ExcelのA列に入力された文字列を検索し、対応するリンクをクリックして、B列にタイトル、C列に貸出開始日、D列に出演者を書き込んでいく処理をVBAで実装したいです。
- 現在はリンクへの検索までは実装できていますが、その後の処理ができないため、どのようなコードを使用すれば良いか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リンク先のサイトは質問を読んで初めて使いましたので、完璧に質問者様の望む回答は出来ないと思いますが、参考程度になればと思い回答させて頂きました。 また質問者様のOSはXPとのことですので、IEのバージョンは8かそれ以前かと思われますが、VBAでIE操作の処理をしたい場合はIE9があれば8に比べてだいぶ楽に書けるかと思います。 今回の回答では8でも動作できるように、のつもりで書きましたが、あくまで動作確認は9で行っているため、もし動かなかったらごめんなさいm(_ _)m まず、検索結果から通常版へのリンクのクリックですが、検索結果の通常版へのリンクのURLは http://www.dmm.com/rental/-/detail/=/cid=n_612mgb★★★★/ ※★★★★の部分は検索の文字列(型番?) のような感じになっているようです。(n_612mgbの部分も恐らく可変かと思われます) サイトのアンカー内にはclassしか設定されていないようですので(IE9であればclassから直接拾うことが可能なのですが・・・)、ページ内の全てのアンカーを拾い、固有の部分と型番が一致したリンクが見つかったらクリックしループを抜けるようにしてあります。 (その前に、objという変数をObjectで宣言しておいてください) For Each obj In objIE.document.getElementsByTagName("a") If obj.href Like "*★★★★*" And obj.href Like "http://www.dmm.com/rental/-/detail/*" Then obj.Click Exit For End If Next その下に画面遷移待ちの処理(質問文内のwaitNavigation)を再度入れます。 次にページ内の情報取得ですが、 作品タイトルは<h1>タグで囲まれており、ページ内に他の同一タグは存在しません。 その為、 Range("B1") = objIE.document.getElementsByTagName("h1")(0).innertext で出力できます。 貸出開始日、出演者は<td>タグで囲まれています。 tdタグで囲まれている項目は他にも多数あるようですので、試しにMsgboxでページ内からtdタグの項目順番に表示させてみると 「2013/4/3」は5番目 「ダニエル・クレイグ レイフ・ファインズ ジュディ・デンチ ナオミ・ハリス ベレニス・マーロウ ベン・ウィショー ハビエル・バルデム」は13番目に出てきました。 なので以下の様な感じで出力できるかと思います。 Range("C1") = Format(objIE.document.getElementsByTagName("td")(4).innertext, "yyyy.mm.dd") Range("D1") = objIE.document.getElementsByTagName("td")(12).innertext ※配列で出力されるため、0が1番目になります もしかしたら検索方法や内容によってページのソースも変わってくるかもしれませんが、そのあたりは質問者様で上手くアレンジして下さい。 後はサイト自体の仕様が変わってしまうと勿論ですが上手く出力できなくなります。 またページ内から情報を取得したい場合、通常の画面遷移待ちの処理では確実に判断されず、実行時エラー91などが出てしまう場合がありますので、もし頻繁に出てしまうようならSleep関数などで数秒ブレークさせる処理を入れると良いかもしれません。
その他の回答 (1)
- oka_me
- ベストアンサー率86% (26/30)
度々すみません。。。 If obj.href Like "*★★★★*" And obj.href Like "http://www.dmm.com/rental/-/detail/*" Then の部分は If obj.href Like "*★★★★*" And obj.href Like "*/rental/-/detail/*" Then にしてください。 (ソース内では相対パスで記述されているので、フルパスで検索すると引っかからないようです。。)
お礼
ご回答ありがとうございます。 お陰様で希望のものが出来ました。 やはり思ったとおりにはいかなくてエラーが出るケースがあるので、それらを少しずつ解決していきたいと思います。 sleep関数も役立ちました。 やはりというかなんというか、webページを取得したりするのはhtmlの知識が必要なんですね。タグについて少しだけ理解することが出来ました。 ありがとうございました。