特定のHTMLファイル内にあるタグと要素を取得したいのですが、そのようなこと全般ができる関数、もしくはクラスというものがありますでしょうか?
Tidy関数というものがあります。
HTMLをパースして処理を行うことができます。
ドキュメント化が進んでいないため、マニュアルをみてもよく分からないこともあると思いますので、実際にサンプルコードを書いて試してみてください。
私もこの関数の使い方がよく分かりませんでしたので、少し検索して使い方を紹介しているサイトを探してみたのですが、良さそうなところが見つかりませんでした。
少しでも参考になると幸いです。
http://nyx.pu1.net/function/strings/explode.php
特定のHTMLファイルが定型物ならexplodeを使ってどうにかならないでしょうか?
explodeは文字列を特定の文字列で分割して、配列に入れるものです。
たとえば、あるHTMLファイルの<title></title>間の文字を取りたい場合、
文字列AにHTMLファイルを読み込む。
文字列Aを<title>
なるほど、ありがとうございます。
私も以前似たようなものを探してそのものずばりのものを残念ながら見つけることはできませんでした。
類似のものとしては、フラグを立てて行き、要素を抜き出すというクラスがありましたが役割としては不十分だと感じました。
タグのエレメントを抜き出すというのであれば、
xml_parser_set_optionなどをつかわれてみてはどうでしょうか?タグのネスト構造はコーディングしてあげないといけませんがattrsにタグ要素などが入ってくるので抜き出すことができます。
ソース付きのサンプル。
http://kuippa.s188.xrea.com/h/
※ネスト構造を読み込むような作りにはなっていません。
getxml.phpのstartElement関数の
($parser, $name, $attrs)あたりを確認してみてください。
あまりお役に立てませんが一助まで…
参考になります。
有り難うございます。
http://manual.xwd.jp/function.preg-match-all.html
preg_match_allを使われてはいかがでしょうか。
タグの要素に何が入っているか分からないときでもパターンマッチで判定できるので、便利です。
また、上手くパターンを書けば、タグを含めた文字列と要素を配列で返してくれたりもするので便利です。
私自身、kuippaさんのこちらからリンクされているコードを参考に
http://beta.g.hatena.ne.jp/kuippa/20060220
はてなに関するサービスを作ってみました。
http://d.hatena.ne.jp/masasan/20060412
・はてなbookmarkers
・はてな質問者履歴
とりわけbookmarkersのほうではパターンマッチングを便利に使っています。
質問から少し外れてしまうかもしれませんが、既存のHTMLの一部の情報を抜き出して活用する、ということであれば以下の書籍が非常に参考になります。
ほとんどがPerlのサンプルですが、考え方はPHPにも応用できると思います。
Spidering hacks―ウェブ情報ラクラク取得テクニック101選
HTMLはXMLのように構造がしっかりとしていないので完全にparseするのは難しいのですが、色々な方法を使って情報の抜き出し、変形などを行っています。
ここから書籍で紹介されているサンプルコードをダウンロードできます。
「hack084」はPHPです。
詳しくは書籍の内容を確認していただきたいのですが、scrape_func.phpというコードにてHTMLから情報を抜き出す(こすり落とす)機能を実装しています。
上記の4つの簡単な関数を定義しています。
oreilly.phpは上記の関数を呼び出して整形した結果をメールで送付するサンプル、oreilly2.phpは解析した結果をRSSにするサンプルです。
現在はO'REILLYのページのHTMLの内容が変わってしまったのでそのままでは使えませんが、情報の区切りとするタグ、情報取得の対象となるタグを変更すれば使うことができます。
今はRSSを出力しているサイトが多いので、こういった技を使わなくても情報を取得して流用することは簡単になっていますが、RSSに対応していないサイトから一部の情報を取得する際には役に立つと思います。
参考になると幸いです。
ありがとうございます。
まさにしたかったことはこれです。
特定のページのRSSを作成するプログラムを作りたいのですが、そのページは[次へ][戻る]ボタンがついていて、phpの処理としてそのボタンをクリックしなくてはならなくて、ちっと困っています。
HTMLからの抽出は>5でbonlifeさんが上げられているサンプルプログラムを参考にするのが楽かと思います。取得要素が可変であれば大枠で取得したものをタグでsplitしたり、またタグが入り組んでいるのであればgetBlock前に該当タグを任意の文字列でstr_replaceしてあげるとうまくいくこともあります。
そのページは[次へ][戻る]ボタンがついていて、phpの処理としてそのボタンをクリックしなくてはなら>なくて、ちっと困っています。
もしURLにクエリ文字列を付加して出力しているのであれば、それを解析してURLで指定することでうまくいくかもしれません。
クエリ文字列の例 URL: http://d.hatena.ne.jp/xxxxxx/edit?date=20060420
この場合変数dataに20060420を投げていることになります。
参考にクエリ文字列の解析機
アドバイス、ありがとうございます!
まさしくその通りで、クエリ文字列の解析でどうにかなりそうです。
貴重な情報、有り難うございます。