アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBでページソースにあるURLを全て抽出したいと考えています。
どのようにすれば良いか教えてください。
サンプルコードがあると助かります。
具体的には、以下の通り。
(1)ウェブページのソースを読み込む
(2)読み込んだソースを1行ずつ探索し<a href="****">の****の部分を全て読み込んでいく
(3)ExcelのURL欄に順に入力していく
(4)URL一覧の出来上がり
よろしくお願いします。

A 回答 (1件)

こんにちは。



VB or VB(A) ? 開発環境が不明ですよ。

質問の内容ならたいしてソースは変わらないですけど、ちゃんと
明記した方が良いですよ。Excel に出力するなら VBA でって前提
で回答します。

> (1)ウェブページのソースを読み込む

とありますが、リンク抽出が目的であるならソースを読み込んで
テキスト解析するより、DOM を利用した方が簡単です。

DOM を取得する方法はいくつかありますけど、一番簡単な IE を
使った例。

Sub sample()

  Dim ie  As Object ' InternetExplorer
  Dim dom  As Object ' HTMLDocument
  Dim anc  As Object ' HTMLAnchorElement
  Dim sAddr As String
  
  Const IE_READYSTATE_COMPLETE As Long = 4&
  
  Set ie = CreateObject("InternetExplorer.Application")
  ie.Visible = True
  
  ie.navigate "ここに目的のURL"
  While ie.Busy Or ie.readyState <> IE_READYSTATE_COMPLETE
    DoEvents
  Wend
  
  Set dom = ie.document
  For Each anc In dom.links ' // or dom.getElementsByTagName("a")
    sAddr = anc.href
    ' // javascript:void(0) 等の除去
    If InStr(LCase$(sAddr), "javascript") = 0 Then
      ' // 出力(仮にイミディエイトウインドウ)
      Debug.Print sAddr
    End If
  Next
  
  Set dom = Nothing
  Set ie = Nothing

End Sub

要は、For Each ループでアンカー要素を回せばよいわけで、DOM の取得が
できるのであれば、その方法は何でもよいです。

丸投げというわけではないのでしょうが、結果としてそのようになって
しまうのは本意ではありませんので、端折った回答にしておきます。
Excel のセルへ書き出す方法は、ご自分で考えてください。

最後に、IE 操作と DOM オブジェクトについて参考となる定番ページを
紹介しておきます。

[三流君VBAでIE操作]
http://www.ken3.org/cgi-bin/group/vba_ie.asp
    • good
    • 0
この回答へのお礼

ご指摘等々含めてありがとうございました。早速試してみたいと思います。

お礼日時:2009/05/03 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!