- ベストアンサー
VBAでハイパーリンクを抽出することについて
VBAやHTMLに詳しい人に質問です。 webサイトからハイパーリンクの値を取得するVBAコードを10年近く前に書いたのですが、全く覚えていないので困っています。 例えば下記の南関競馬の年間日程表のページから、各日程のハイパーリンクの値(4月1日なら /program/20140401200101.do )を抜き出し1つの列に並べて表示するという動きです。実行すると画像のようになります。 https://www.nankankeiba.com/calendar/201404.do しかし、現在は南関競馬は大幅リニューアルしたらしく、HTMLの仕様も変わったようなので、上手く動きません。 下はコードの一部分ですが多分ですが、サイトがリニューアルした結果、下記の行での指定("EM") では上手くアクセスできないのかと思います。HTMLも全く知識がないので、詳しい方いましたら、アドバイスお願いします。 Set Doc = ie.document Set chNodes = Doc.getElementsByTagName("EM") 'getElementsByTagName On Error Resume Next For Each chNode In chNodes Set docPart = New HTMLDocument docPart.write chNode.outerHTML Set chNodes1 = docPart.getElementsByTagName("A") myCell.Value = Replace(chNodes1(0).href, "about:", "") Set myCell = myCell.Offset(1, 0) Next chNode
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ちょっとの改変でいけそうな気はしますね。二行目のEMをaに変えたら良いんでないでしょうか。 そうすると、コンテンツのaタグが配列で取れるので、あとはループ無い処理を書き換えて、先頭の文字が「/program/」となっているものだけをセルに書き込めばいいんじゃないでしょうか。 VBAがある程度は理解しているという想定で回答してます。部分的なプログラムであることと、こちらはMacなので、動かせてません。 aタグとは、下のコンテンツの一部分ですが、a hrefというのがaタグで、これが配列で取れますが、/bangumi/20142001.doだとか、他のものも含まれるので、先頭が/program/のものだけを書き込めば良い想定です。 <a href="/program/20140401200101.do" class="nk23_c-table21__icon is-style1"> <img src="/assets/images/common/icon/icon_moon1.svg" alt="ナイター開催"> </a> <a href="/bangumi/20142001.do" class="nk23_c-table21__icon is-style1">番組</a> Set Doc = ie.document Set chNodes = Doc.getElementsByTagName("a") 'getElementsByTagName On Error Resume Next For Each chNode In chNodes
その他の回答 (1)
- type0(@type0)
- ベストアンサー率56% (344/611)
サイトの利用規約でスクレイピングは許可されていますか?知らなかったでは済まされないので、↓は気をつけた方が良いです。禁止してなくても、短い間隔でスクレイピングすると、サーバーに負荷がかかるので、攻撃と見なされる可能性もありますね。 スクレイピングを行いたいWebサイトがあれば、まずは利用規約を確認するのが基本の流れです。 利用規約にスクレイピング禁止だと明記してある場合、違反になり最悪のケースでは損害賠償を請求される恐れがあります。 問題無いのであれば、親切な人がコードを提供してくれる可能性はあります。
補足
ご忠告ありがとうございます。 サイト利用の規約を読んだところ、スクレイピングやデータマイニング等の禁止と書いてる項目はなかったので大丈夫そうです。 1日1回取り込めば、その日は読み込むことないのでサイトへの負荷の面でも大丈夫かと
お礼