• 締切済み

マッチ情報を取得

$yahoo = file_get_contents(http://www.yahoo.co.jp/) で取得したソース情報の中から特定の情報だけを抜き取りたいのですが・・・。 正規表現 preg_match()などを使って欲しい情報があれば、特定の範囲を抜き取りするのかな?と思うのですが・・・。 いまいちやり方がわかっていません。 アドバイスお願いします。

  • PHP
  • 回答数4
  • ありがとう数2

みんなの回答

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

#1です。 > 切り抜く方法がわからないので、教えてください。 かなり ざっくりとでしたが、#1で書いてある通りです。 #2さんも書いてある通り、俺がやったようなゴリ押しでやると、すんごい疲れますよ。 #3さんが書いてあるように「スクレイピング」で検索したほうがスマートなやり方が見つかると思います。 俺がやったサイトは、俺の欲しい情報は ほぼ必ず、同じ行に入っていたので、 その行を strip_tags したり、いろいろ小技を使って、分解しただけです。

noname#243182
noname#243182
回答No.3

これは「スクレイピング」と呼ばれる処理です。検索することで、新たな情報が得られることでしょう。

参考URL:
http://pear.php.net/package/XML_HTMLSax3
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

> アドバイスお願いします。 マークアップされたデータを単なる文字列として扱うには、相当な労力が必要になります。 <ul> <li title="<li></li>">def <li>ghi</li> </ul> たとえば上のようなツリーから、def を子として持つ li 要素を preg_match でスムーズに取得できるでしょうか。li ができたとして他の要素ではどうでしょう。全パターンを網羅する記述は、あまり考えたくないですね。いわばパーサを自分で組むようなものです。 パーサを自分で組む時間と労力があるのでしたら止めませんが、XML を扱う API として DOM, XPath, XQuery, Selecters API, XSL など多数存在しているのですから、それらを利用しない手はないでしょう。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

んー、正直、自分もyahooのソースの解析なんてした事ありませんし、 具体的に、何の情報を切り取りたいのか分かりませんので、 アバウトなアドバイスしか出来ません。 yahooのソースを 何度も取得してみて、 自分の欲しい情報の入っているブロックが一定の場所であれば、 そこを抜き取ればいいと思いますし、 そうでなければ、特定の共通のキーワードになるようなものを探して、 そこらへんを基点に切り抜くとか、そんな感じになるんじゃないかと思います。

wakaba777
質問者

補足

Yahooは一例のURLです。 切り抜く方法がわからないので、教えてください。

関連するQ&A

  • サイト内の一部の情報を取得したい。

    file_get_contentsとpreg_matchを使ってhttp://blogs.yahoo.co.jp/y_j_blogの訪問者履歴の情報(ニックネームとYahoo!ID)を取得したいのですが、上手く行きません。 JavaScriptの中身の情報を取得する方法はないのでしょうか? 具体的なソースコードを教えて頂ければ有り難いです。

    • 締切済み
    • PHP
  • PHPでWebページの特定部を取得したいのですが、上手くいきません。

    PHPでWebページの特定部を取得したいのですが、上手くいきません。 現在file_get_contentsを用いてURLを指定して取得し、preg_matchの引数にする方法で行っています。 また、preg_matchは以下のように用いています。 preg_match("/パターン(.*?)パターン/s", $html, $matches); print_rで$matchesを表示してみたところArray()のみ出力されます。 また、話が逸れて申し訳ないですが、上記とは別にfile_get_contentsを用いて動的にURLを指定して取得しているのですが、処理に時間がかかります。(約10秒) $wordをURLに組み込む変数として以下のように記述しています。 file_get_contents("http://…".$word."…(URLの続き)"); 以上の2点についてご教示願います。

    • ベストアンサー
    • PHP
  • preg_matchの正規表現がうまくいかない

    たとえば、http://gehasoku.com/?p=2のソースコードには ------------------- <rdf:Description rdf:about="http://www.com/aaa.html" trackback:ping="http://www.com" dc:title="タイトル" dc:identifier="http://iii.com/bbb.html" dc:subject="ハードウェア" dc:description="1 名前:名無しさん " dc:creator="soft_net" dc:date="2012-02-21T20:05:01+09:00" /> ------------------- のような形の<rdf:Description~~~/>タグの情報ががいくつかあると思います。これらすべてを文字列として取得したくて、次のようなphpを作成しましたが、うまく動作しません。 原因はどうやらpreg_match_allの正規表現がうまくいっていないからのようですので、 <rdf:Description~~~/>を抜き出すことができる正規表現を教えてください。 自分でもここでチェックしながらやりましたが、 http://www.rider-n.sakura.ne.jp/regexp/regexp.php <rdf:Description~をマッチすることはできても、/>で閉じることができませんでした。 よろしくお願いします。 <?php $url="http://gehasoku.com/?p=2"; $html=file_get_contents($urls); preg_match_all("/<rdf:Description(.*)?\/>/",$html,$match); print_r($match); foreach($match[1] as $value){ echo $value; } ?>

    • ベストアンサー
    • PHP
  • 特定のサイトからの情報の取得について

    現在、許可を得て、あるサイトから商品名等の情報を取得しております。 取得方法といたしましては、API等がないため、PHP cURL関数を用いて、ページ情報を取得し、 preg_match関数を使い、タグにより正規化して必要な情報を取得しております。 しかし、この方法ですと、サイトがリニューアルするごとにpreg_match関数の正規化の部分の改修が必要となっております。 サイトがリニューアルした場合でもpreg_match関数の正規化の部分の改修が発生しないような方法はございませんでしょうか。 ※固定のタグ、idやclass名などをつけることは難しい状態です。 cURL関数を用いない方法等がございましたら、その方法もご教授いただきたいです。 ご存知の方がいらっしゃいましたら、ご教授をお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで<title>タグ取得の動作が非常に重い

    PHPで<title>タグ取得の動作が非常に重い $html = file_get_contents($url); if(preg_match( "/<title>(.*?)<\/title>/i", $html, $match)) { } 上記のような方法で一度に(1ページ内で)30サイトほどの<title>タグを取得すると、不可がかかり、表示までにかなり時間がかかってしまいます。 preg_match では重いのでしょうか。 それとも一度に30サイトはそもそも無理があるのでしょうか。。

    • ベストアンサー
    • PHP
  • 、"(ダブルクォーテーション)で囲まれている文字列を正規表現で取得

    質問させてください。 abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" asdakjsd のような文字列があります。 これの、"(ダブルクォーテーション)で囲まれている文字列を取得したいのですが、正規表現がうまくいきません。 取得結果としてはは、xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh の部分がほしいです。 preg_match('/"([.*])"/', $str, $matches);とやったり preg_match('/\"([.*])\"/', $str, $matches);とやったり preg_match('/\"([.*?])\"/', $str, $matches);とやったりしたのですが、 どうしても$matchesにほしい結果は入っていません。 どのような正規表現で取得可能でしょうか? 何卒ご教授ください。

    • ベストアンサー
    • PHP
  • file_get_contents 画像直URL

    file_get_contents($url);した際、画像の直URLがあったら、画像をローカルに保存して、URLを書き換えたいのですが、どうやればいいでしょうか? if(preg_match("/http:\/\//", file_get_contents($url))) { ?? } また、画像をローカルに保存って、PHPで出来るのでしょうか?

    • ベストアンサー
    • PHP
  • preg_matchでの コンマ について 

    phpでの正規表現で 「もしも変数$wordへ入力した文字列が Japan's という文字列に一致すれば」というスクリプトを作成しましたが、うまくいきません。 if(preg_match("/japan\'s/i",$word,$match)){ この Japan's における カンマの取り扱いを このケースではどうしたらいいかよくわかりません。 \' としてみましたが、うまくいきません。 なにかアドバイスやヒントがありましたら、よろしくお願いします。 ああでもない、こうでもないとやってみましたが、その過程で 唯一 Japan's にヒットしたのは、次のスクリプトでした。 if($word=="japan\'s") ただし、これは正規表現は使っていないわけですよね。 なにか、自分のローカル環境に問題があるのかと思い、レンタルサーバーに同じものをuploadして試して見ましたが、やはり結果は同じで、ヒットしませんでした。別のパソコンでもやってみましたが、結果は同じでした。 整理しますと、 (preg_match("/japan's/i",$word,$match) ではヒットせず、よって コンマの前に\をつけて(preg_match("/japan\'s/i",$word,$match) としましたが、これもヒットしなかったということになります。 1) (')は正規表現の特殊文字でないはずですから、そのまま使えるはずだと思いましたが、なぜかこれが使えない。 2) しかも、その前にエスケープの \ をつけても、そのエスケープ が効かないのはなぜか。 追記: 最近分かったこと。 おもしろいことに、 'j すると、hitする。でも、j' とするとヒットしない。 ということは、コンマ自体には問題ないのだろうと推測しています。でも、文字の後にコンマがつくと、preg_matchにとって特別な意味を持つ文字列に変わるのではないか。

    • ベストアンサー
    • PHP
  • PHPの正規表現「preg_match」で漢字を含む場合のマッチパター

    PHPの正規表現「preg_match」で漢字を含む場合のマッチパターンについて 宜しくお願い致します。 preg_matchを使っての正規表現で、「あいうえおかきくけこ3月10日さしすせそ」という文字列から「3月10日」だけを抽出するには、どういうパターンが良いのでしょうか? 下記の様にやってみましたが、だめでした。。。 preg_match("/\d{1,2}[月]\d{1,2}[日]/",$hoge,$match) これではうまくいきません。 どなたかお助けくださいー!

    • ベストアンサー
    • PHP
  • phpでhtmlのタイトルを取得する方法について

    phpを使い、URLで指定されたサイトのタイトルを取得したいと考えています。 以下の通り実装してみたのですが、特定のサイトで取得したタイトルが文字化けしてしまいます。 mb_internal_encoding("UTF-8"); $html = file_get_contents($url); $convertedHtml = mb_convert_encoding($html, 'UTF-8', 'auto'); if (preg_match('/<title>(.*)<\/title>/i', $convertedHtml, $matches)) { return $matches[1]; } ※$urlにはタイトルを取得したいサイトのURLが入っています ※例をあげると、"http://rental.geo-online.co.jp" を$urlにセットした場合にタイトルが文字化けします 文字化けしてしまったサイトの文字コードは、x-sjisやEUC-JPでした。 この場合、$htmlから文字コードを指定しているタグをを取得すれば良いのか、 とも考えましたが、HTMLの知識に乏しくどのように正規表現を書いたら良いのかがわかりません。 ちなみにphpのバージョンは5.3.2です。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう