VBAを使ってHTMLソースから特定の文字を抽出

このQ&Aのポイント
  • VBAを使用してHTMLソースから指定の文字を抽出する方法を教えてください。
  • ExcelでVBAを使って特定のサイトからHTMLソース内のURL情報を取得する方法についてアドバイスをお願いします。
  • 複数のサイトからHTMLソース内のURLデータを取得し、表示したいのですが、ページ移動時に問題が発生しています。アドバイスをいただけないでしょうか?
回答を見る
  • ベストアンサー

VBAを使ってHTMLソースから特定の文字を抽出2

前回ExcelでVBAを使って「http://www.nankankeiba.com/calendar/201204.do」のサイトからHTMLソースから<em></em>タグ内の<a href="URL">のURL情報だけを抽出するコードを教えて頂きました。 そこで、取り込んだデータの更に下に「http://www.nankankeiba.com/calendar/201210.do」からも同じように<em></em>タグ内のURLデータを取得して表示したいのですが、ページ移動しても同じ情報を取得したり上手くいかないのでアドバイス頂けないでしょうかm(_ _)m 上のURLだけを取り込むコードはこちらになります。 http://uproda.2ch-library.com/800072670/lib800072.txt イメージとしてこの様にしたいです。 http://uproda.2ch-library.com/800071Xz0/lib800071.jpg

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

前のご質問に回答した者ですが、他のサイトは見に行かない主義なので、外していたら悪しからず。という事で前回のURLを載せておきます。 http://okwave.jp/qa/q8648361.html ループ変数を使うのが面倒くさいというものぐさ(死語?)コードです。 A列に年月?、B列にHyperlink先を入れています。 'Microsoft Internet Control 'Microsoft HTML Object Library 'に参照設定 Sub test() Dim ie As InternetExplorer Dim doc As IHTMLDocument Dim docPart As IHTMLDocument Dim chNode As IHTMLElement Dim chNodes As IHTMLElementCollection Dim chNodes1 As IHTMLElementCollection Dim dateArray As Variant, myDate As Variant Dim myCell As Range Const urlSeed As String = "http://www.nankankeiba.com/calendar/myDate.do" dateArray = Array("201204", "201210") Set myCell = ThisWorkbook.Sheets("Sheet1").Range("A1") For Each myDate In dateArray Set ie = CreateObject("InternetExplorer.Application") With ie .navigate Replace(urlSeed, "myDate", myDate) While .Busy Or .readyState <> 4: DoEvents: Wend End With Set doc = ie.document Set chNodes = doc.getElementsByTagName("EM") Application.ScreenUpdating = False For Each chNode In chNodes Set docPart = New HTMLDocument docPart.write chNode.outerHTML Set chNodes1 = docPart.getElementsByTagName("A") myCell.Value = myDate myCell.Offset(0, 1).Value = Replace(chNodes1(0).href, "about:", "") Set myCell = myCell.Offset(1, 0) Next chNode ie.Quit Next myDate Application.ScreenUpdating = True End Sub

Excel401
質問者

お礼

mitarashiさん回答ありがとうございます。前回に引き続きお世話になりますm(_ _)m 独学でVBAの勉強し始めたばかりなので、Replace関数での置換や、配列の要素でループするなどは勉強になりました。

関連するQ&A

  • VBAを使ってHTMLソースから特定の文字列を抽出

    ExcelでVBAを使ってHTMLソースから特定のデータを抽出したのですが、VBAは浅学なのでアドバイスを頂きたいです。 例えば、ここサイトの「 http://www.nankankeiba.com/calendar/201304.do 」 <em></em>タグ内の<a href="URL">のURLだけを取得して並べたいのですが、可能でしょうか。 この部分。(http://uproda.2ch-library.com/799465NHT/lib799465.jpg) ここ辺りが参考になりそうなのですが、<em></em>タグ内に限定する方法がわかりません。詳しい方いましたら、アドバイスよろしくお願いします。 http://okwave.jp/qa/q5919101.html 理想としてはこんな感じで取り出せるようにしたいです。(「program/20130407200101.do」の部分だけでも良い) http://uproda.2ch-library.com/7995052y7/lib799505.jpg

  • テキストから文字列を抜き出すには?(HTMLソース

    HTMLが書かれたテキストファイルから <a href="http://-----.com">hogehoge</a>のように書かれたタグから http部及びhogehoge部を抜き出すのに良い方法はないでしょうか? 現在IndexOfを使って"<a"~等で取得していますがタグの書き方によっては <a href="から始まっているとは限らないのでこの辺りも何とかしたいと考えてます。 何かご存知の方いましたらご教授お願いします 環境はVB 2005 Pro を使用しております

  • エクセルVBAにてURLの抽出

    エクセルVBAのマクロを用いてテキスト(ソースコード)よりURLを取得したいと考えています。 <a href="**"> 左記の「**」を取得し、エクセル上に 一覧として出力するものを想定しています。 なお、ソース上にhrefのコードは複数存在するので、 それら全てを出力したいのです。 以下が出力希望例になります。 <a href="http://www.test.co.jp"> <script type="text/javascript"> <a href="http://www.test2.co.jp"> 出力結果 http://www.test.co.jp http://www.test2.co.jp 諸事情があり、テキストを読み込んでエクセル上に取得する形式でお願いしたいです。 すみませんが、よろしくお願いします。

  • PHPでHTMLソースを取得する方法はありますか?

    PHPでHTMLソースを取得する方法はありますか? RSSで複数のHTMLソースを取得しました。 以下のことをやりたいのですが、こういったことは可能でしょうか? ・複数のHTMLソースを取得する(同じサイトからなのでタグの種類も大体同じものです) ・その中から<data>タグを取得する(dataの中にはそれぞれ適当な数字が入っています) ・それをソートして、ソート順にURLを表示する。 このようなことは可能でしょうか? $RSS=RSSのURL(XML) foreach($RSS as $value){ $URL[]=$value->URL; } for ($i = 0, $n = count($URL); $i < $n; $i++) { echo $URL[$i] . "<br />"; } これでそれぞれのURLが URL1 URL2 URL3 とそれぞれ表示されます。これらのURLからそれぞれの<data>タグを取得して上のようなことをやりたいです。 説明が下手で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLソースからURLだけを抜き出す方法を教えてください!

    どなたかお知恵をお貸しください。 HTMLのソースファイルからURLを取得するツールを 作ろうと思うのですが、そのURLだけを抜き出すと いうところがよく分かりません。 ソーステキストを open "source.txt" for input as #1 do until eof(1) line input #1,aa で一行ずつ読み込んでいき、 その中から InStr関数で「http://」の文字列を検索すると いうことぐらいは想像がつくのですが、URLは 文字数も決められているわけではないので、検索で 見つかった位置から最後までを抜き出すという方法が どうしても分かりません。 あるいは、タグの <A href= という文字列を検索して 見つかった位置から次に > という文字列が見つかった 場所までの間を抜き出すという方法になるかと思いますが、 最初に検索で見つかった位置から次に見つかった位置まで をどのように検索すればいいのかが分かりません。 何かいい手がございましたら、ぜひ教えてください。 よろしくお願いします!

  • ExcelのVBAでHTMLのタグ数を取得するには

    VBAでHTMLソースからタグ指定で情報を取得したいのですが、そのページ内にある特定のタグ数を取得する方法で躓いています。 例えば、下記のURLの"TD"のtagNameから情報を抜き出しているのですが、他のページでは"TD"タグ数が変わってきます。ループ条件で"TD"のタグ数が必要なので、数を取得して変数として代入したいのですが、どうすれば良いでしょうか。ちなみに下のサイトの"TD"の数は71個です。 http://db.netkeiba.com/horse/ped/2010110097/

  • Ajax.Requestで取得したHTMLソースから'href'の値を

    Ajax.Requestで取得したHTMLソースから'href'の値を取得する方法について Javascriptにて取得した別ページのHTMLタグから 必要な部分のみ値を取得し、配列に格納することは可能でしょうか? 以下Javascript ------ var url = "http://test/index.htm"; new Ajax.Request( url, { "method":"get", asynchronous:false, onComplete: function(request) { html = request.responseText; } } ); alert(html); ------ 以下"http://test/index.htm"のHTMLタグ ------ <html> <head> </head> <body> <a href='http://test/index2.htm'>index2</a> <a href='http://test/index3.htm'>index3</a> <div>index4</div> </body> </html> ------ 上記で"http://test/index.htm"のHTMLタグの全てを取得して出力することはできたのですが、 "href"の"http://test/index2.htm" "href"の"http://test/index3.htm"のみ配列に格納したいのです。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • cURL から特定の文字列を抜き出したい

    あるページから、店舗名や住所、ある一定の文字列を抜き出したいのですがうまくいきません。 抜き出したいページには以下のような情報が書き込まれており、新店舗が出来ると更新されます。 ------------------- 写真や店舗紹介ページにあるような部分 【店舗情報】 ■店舗名 『保険代理店A』東京中央店 ■取扱募集代理店 株式会社ほけんブラブラ ■所在地 東京都中央区2-2 田中ビル5F ■電 話 0120-00-0200 ■開店日 2013年3月1日(火) ■営業時間 10:00~18:00 ■対応コース 来店 ------------------- 上記の7項目は絶対に変化なくページに存在しています。 そのページをcurlで取得し、一定の処理をします。 現在書けているのプログラム function curl_get_contents( $url, $timeout = 60 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; } $result = curl_get_contents( "http://example.com?id=16", 120 ); $do = mb_strpos($result, "■"); echo $do; --------------------- 最初の■からの文字列は取得できるのですが、そこからの処理が分かりません。 できたら、連想配列に格納したいのです。 どうか諸先輩方のお知恵をお借り出来たらと存じます。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • inet コントロールを用いてHTMLソースのリンクを全て取得するには?

    お世話になります。 Inet.OpenURL("http://www.yahoo.co.jp") でhtmlソースは取得できたのですが <a href>タグの中のurlを全てとりだしてテキストファイルに保存するにはどうすればよいでしょう? いろいろ調べてみたのですがサンプルプログラムがみつからず困っています。詳しい方しえてください。

  • 夜の山での懐中電灯

    来年登山にでも行こうと思って懐中電灯選んでるんですがどっちがいいですか? 結構明るそうなのを選んだんですがよかったらいろいろ懐中電灯について教えてほしいです。 http://uproda.2ch-library.com/849149hnm/lib849149.png http://uproda.2ch-library.com/849150h5B/lib849150.png

専門家に質問してみよう