PHPで他サイトのHTMLを取得してデータ抽出するプログラムを作っています。

PHPプログラム上で取得したHTMLの表(<TABLE>)のセルの情報を読み取る簡単な方法は無いでしょうか?

やりたいことは複数のサイトにあるイベント情報等のカレンダーのセルの値を取得したいのです。
http://q.hatena.ne.jp/1145454292 を参考にHTMLを取得してタグを分割したり文字列検索したりしてある程度は取得できました。
ただHTMLのフォーマットが変わったりするとその都度修正が必要になりますし、見える表はそれなりなのですがHTMLを見ると余計なタグ(<TD>が多かったり)があるなどパターン化しにくいサイトもあります。

そこでHTMLを読み取るというよりは「人が見える形の表」として扱えないかと模索中です。例えば「表の縦○列目、横×列目」として取得するような方法です。
日付のセルと内容のセルの関連付け等はプログラムでやるのは当然としても「人が見える形の表」として扱えればある程度フォーマットが変わっても対応しやすいのかなと思います。

こういうことをやったことがある方や、「こうしたらできるかも?」というアイデアをお持ちの方は是非教えていただけないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/06/16 10:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

「表の縦○列目、横×列目」として取得するのでしたら、結局、TABLE構造の解析をしなければならないと思います。


ソースのHTMLの記述は正しいという前提で、厄介なのは colspan, rowspan の扱いですね。

Perlスクリプトになりますが、「table2csv.pl - tableタグをcsvに変換するPerlスクリプト」が参考になるでしょう。CSVに変換せず、配列のままもっておいた方が処理はしやすいでしょう。

id:mstkwb

ご回答ありがとうございます。

やはりTABLE構造の解析をするしかないですか・・・

colspan, rowspanが出てきたら完全にフォーマット変更なのでソース修正を覚悟するしかないですね。

ご紹介頂いたPerlのスクリプトならcolspan, rowspanにも対応しているようですし2次元配列にできるようなので、PHPに変換して取り込むよう検討したいと思います。

2009/06/10 11:41:02
id:guki No.2

回答回数51ベストアンサー獲得回数1

ポイント10pt

スクレイピングですね。PHPでもライブラリは沢山ありますので、検索して好きなのを使ってみてはどうでしょうか。

配列に変換したり、XMLにしたりできるようなので、後はタグで絞ったり、解析したりできるでしょう。

htmlSQLなんてSQLのように検索できる面白いライブラリもあるようです。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません