PHPでプログラミングをしています。

特定のHTMLファイル内にあるタグと要素を取得したいのですが、そのようなこと全般ができる関数、もしくはクラスというものがありますでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/04/19 22:44:55
  • 終了:2006/04/26 22:45:04

回答(6件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/04/19 23:49:02

ポイント19pt

Tidy関数というものがあります。

HTMLをパースして処理を行うことができます。

ドキュメント化が進んでいないため、マニュアルをみてもよく分からないこともあると思いますので、実際にサンプルコードを書いて試してみてください。

私もこの関数の使い方がよく分かりませんでしたので、少し検索して使い方を紹介しているサイトを探してみたのですが、良さそうなところが見つかりませんでした。

少しでも参考になると幸いです。

id:fm315

貴重な情報、有り難うございます。

2006/04/19 23:59:09
id:wellmin No.2

wellmin回答回数93ベストアンサー獲得回数02006/04/20 00:17:48

ポイント19pt

http://nyx.pu1.net/function/strings/explode.php

特定のHTMLファイルが定型物ならexplodeを使ってどうにかならないでしょうか?

explodeは文字列を特定の文字列で分割して、配列に入れるものです。

たとえば、あるHTMLファイルの<title></title>間の文字を取りたい場合、

文字列AにHTMLファイルを読み込む。

文字列Aを<title>

id:fm315

なるほど、ありがとうございます。

2006/04/20 00:36:08
id:kuippa No.3

くいっぱ回答回数1030ベストアンサー獲得回数132006/04/20 00:30:44

ポイント18pt

私も以前似たようなものを探してそのものずばりのものを残念ながら見つけることはできませんでした。

類似のものとしては、フラグを立てて行き、要素を抜き出すというクラスがありましたが役割としては不十分だと感じました。


タグのエレメントを抜き出すというのであれば、

xml_parser_set_optionなどをつかわれてみてはどうでしょうか?タグのネスト構造はコーディングしてあげないといけませんがattrsにタグ要素などが入ってくるので抜き出すことができます。


ソース付きのサンプル。

http://kuippa.s188.xrea.com/h/

※ネスト構造を読み込むような作りにはなっていません。

getxml.phpのstartElement関数の

($parser, $name, $attrs)あたりを確認してみてください。


あまりお役に立てませんが一助まで…

id:fm315

参考になります。

有り難うございます。

2006/04/20 00:37:41
id:masasan No.4

masasan回答回数143ベストアンサー獲得回数22006/04/20 00:34:26

ポイント18pt

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のほうではパターンマッチングを便利に使っています。

id:bonlife No.5

回答回数421ベストアンサー獲得回数752006/04/20 08:53:14

ポイント18pt

質問から少し外れてしまうかもしれませんが、既存のHTMLの一部の情報を抜き出して活用する、ということであれば以下の書籍が非常に参考になります。

ほとんどがPerlのサンプルですが、考え方はPHPにも応用できると思います。

Spidering hacks―ウェブ情報ラクラク取得テクニック101選

Spidering hacks―ウェブ情報ラクラク取得テクニック101選

  • 作者: Kevin Hemenway Tara Calishain
  • 出版社/メーカー: オライリー・ジャパン
  • メディア: 単行本

HTMLはXMLのように構造がしっかりとしていないので完全にparseするのは難しいのですが、色々な方法を使って情報の抜き出し、変形などを行っています。

ここから書籍で紹介されているサンプルコードをダウンロードできます。

「hack084」はPHPです。

詳しくは書籍の内容を確認していただきたいのですが、scrape_func.phpというコードにてHTMLから情報を抜き出す(こすり落とす)機能を実装しています。

  • HTMLファイルの読み込み
  • 不要な文字の削除
  • 特定の情報を含む部分の取得
  • 特定のタグにはさまれたテキストの取得

上記の4つの簡単な関数を定義しています。

oreilly.phpは上記の関数を呼び出して整形した結果をメールで送付するサンプル、oreilly2.phpは解析した結果をRSSにするサンプルです。

現在はO'REILLYのページのHTMLの内容が変わってしまったのでそのままでは使えませんが、情報の区切りとするタグ、情報取得の対象となるタグを変更すれば使うことができます。

今はRSSを出力しているサイトが多いので、こういった技を使わなくても情報を取得して流用することは簡単になっていますが、RSSに対応していないサイトから一部の情報を取得する際には役に立つと思います。

参考になると幸いです。

id:fm315

ありがとうございます。

まさにしたかったことはこれです。

特定のページのRSSを作成するプログラムを作りたいのですが、そのページは[次へ][戻る]ボタンがついていて、phpの処理としてそのボタンをクリックしなくてはならなくて、ちっと困っています。

2006/04/20 08:58:51
id:mestallajp No.6

mestallajp回答回数23ベストアンサー獲得回数62006/04/20 18:18:15

ポイント18pt

HTMLからの抽出は>5でbonlifeさんが上げられているサンプルプログラムを参考にするのが楽かと思います。取得要素が可変であれば大枠で取得したものをタグでsplitしたり、またタグが入り組んでいるのであればgetBlock前に該当タグを任意の文字列でstr_replaceしてあげるとうまくいくこともあります。

そのページは[次へ][戻る]ボタンがついていて、phpの処理としてそのボタンをクリックしなくてはなら>なくて、ちっと困っています。

もしURLにクエリ文字列を付加して出力しているのであれば、それを解析してURLで指定することでうまくいくかもしれません。

クエリ文字列の例 URL: http://d.hatena.ne.jp/xxxxxx/edit?date=20060420

この場合変数dataに20060420を投げていることになります。

参考にクエリ文字列の解析機

id:fm315

アドバイス、ありがとうございます!

まさしくその通りで、クエリ文字列の解析でどうにかなりそうです。

2006/04/20 20:25:26

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

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

トラックバック

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません