人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

あるページを閲覧して上から順にクリックして、その先の抜き出したい情報を取得して、書き出しか表示できればと思っています。
言語としては、PHPがEXCLEVBAでやれたらと思っています。
何かヒントか何かあれば教えて下さい

●質問者: たつ
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● TransFreeBSD
ベストアンサー

そういうのをスクレイピングとか言ったりします。
以下使い回し回答と補足

PHP

元のURLのリストがファイルかデータベースかわかりませんが、その一覧から最初のページを生成します。
このあたりは普通のPHPのコードです。
この時、URLそのものとか、データベースならキーとかをリンクに埋め込み、次の処理に渡します。
これも一般的な方法ですね。
で、受け取ったURLを元にスクレイピングを行います。
http://www.php-seed.net/blog/archives/113
あと、ここで過去にあった質問ではsimple_html_dom.phpを使ってました。
http://q.hatena.ne.jp/1318845421#a1110970
http://smkn.xsrv.jp/blog/2010/02/php_simple_html_dom_parser/
http://tips.recatnap.info/simple_html_dom_parser_memo/
他にもくろふねさんのように正規表現でやった方が簡単な場合もあります。
どちらが簡単かは、場合や慣れによります。
このように情報を抜出し、あとは表示するかファイルやデータベースに書き出すかします。

VBA

VBAの場合は、UIにブラウザを使うと若干トリッキーになります。
UIをブラウザにする必要がなければ、普通にフォームを作ってボタンを配置するなりセレクタで選ぶなりして、URLを指定してやります。
この場合はPHPと似たような作りになると思います。正規表現でやる方法もあります。
http://q.hatena.ne.jp/1324686021#a1124403

UIをブラウザにする必要がある場合、まずは元のリストからHTMLを作ります。これは言語は違いますがPHPと似たようなものです。
出来上がったPHPは何処かにファイルとして保存し、それをIEで開きます。
以後、IEが開いたリンクを監視し、条件にあったら情報を抜き出してファイルやセルに書き出すことになります。
http://q.hatena.ne.jp/1319613629#a1113177
ただ、この方法はあまりドキュメントがないし、おそらく安定性も悪いと思いますので、ブラウザをUIにするならPHPの方が簡単でしょう。

最後に

どの方法を使うにしても、相手のHTMLの構造次第なので、トライ&エラーでやっていくしかないです。


たつさんのコメント
ここに自分で作ったコードを診てもらうのは可能でしょうか?

TransFreeBSDさんのコメント
サンプルコードくらいなら。

たつさんのコメント
VBAでつくろうと思ったので、こんな感じでいいのでしょうか? 綺麗に抜くことができないので正規表現でやったほうが綺麗でしょうか? Sub test() Dim oHttp As Object Dim getSource As String Dim nukidashi As String Dim saikoukion As String Dim tate As Integer tate = 1 Set oHttp = CreateObject("MSXML2.XMLHTTP") oHttp.Open "GET", "http://www.bellezza-cs.com/search/seat.php?maker=8&init=0&car=9", False oHttp.Send getSource = oHttp.responseText hit = 1 If getSource <> "" Then nukidashi = Mid(getSource, InStr(getSource, "<table")) Max = Len(nukidashi) For u = 1 To 10 hit = InStr(hit, nukidashi, "<td colspan=") If hit < Max Then hin = Mid(nukidashi, hit + 16, 3) hit = InStr(hit + 16, nukidashi, "<td colspan=") syasyu = Mid(nukidashi, hit + 24, 10) hit = InStr(hit + 16, nukidashi, "<td colspan=") kata = Mid(nukidashi, hit + 24, 10) hit = InStr(hit + 16, nukidashi, "<td>") nensiki = Mid(nukidashi, hit + 4, 12) hit = InStr(hit + 16, nukidashi, "<td width=") teiin = Mid(nukidashi, hit + 15, 1) Worksheets("Sheet1").Cells(tate, 1) = "品番" Worksheets("Sheet1").Cells(tate, 2) = hin tate = tate + 1 Worksheets("Sheet1").Cells(tate, 1) = "車種" Worksheets("Sheet1").Cells(tate, 2) = syasyu tate = tate + 1 Worksheets("Sheet1").Cells(tate, 1) = "年式" Worksheets("Sheet1").Cells(tate, 2) = nensiki tate = tate + 1 Worksheets("Sheet1").Cells(tate, 1) = "定員" Worksheets("Sheet1").Cells(tate, 2) = teiin tate = tate + 1 End If Next u End If End Sub

TransFreeBSDさんのコメント
動くのなら良いのじゃないでしょうか。 正規表現は、慣れていれば短くなって分かり易かったり修正し易かったりしますが、慣れてなければ余計に分かり難く修正し難くなります。 ですので、慣れている方法で行えば良いのではないでしょうか。

たつさんのコメント
わかりました。いつもありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ