PHPでHTMLソースから特定のURLを抽出する方法

このQ&Aのポイント
  • PHPで外部サイトのHTMLソース内の特定のURLを取得する方法について教えてください。
  • 具体的には楽天市場の個別商品ページのHTMLソースからレビューページのURLを抽出したいです。
  • PHP初心者で正規表現がわからないため、プログラムのソースコードを教えていただけると助かります。
回答を見る
  • ベストアンサー

PHPでHTMLソースから特定のURLを抽出したい

PHPで外部サイトのHTMLソース内の特定のURLを取得するにはどうすればいいでしょうか? 具体的には楽天市場の個別商品ページのHTMLソースにあるレビューページのURLを抽出したいと思っています。 ttp://item.rakuten.co.jp/asagao/332/のHTMLソースから レビューページのURLのttp://review.rakuten.co.jp/item/1/229861_10000050/1.1/を取得するようなプログラムを作りたいと思っています。 自力で頑張ってみたもののPHP初心者のため、preg_matchや正規表現でお手上げ状態になってしましました。 プログラムのソースコードを教えていただけると助かります。 ご回答よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

うーん。 授業料が欲しいくらいだけお。 でも暇だっから今回は許すお。 僕に感謝するお。 --------------------------- // find all link foreach($html->find('a') as $e){ $txt = mb_convert_encoding($e->plaintext, 'UTF-8', 'EUC-JP'); $href = mb_convert_encoding($e->href, 'UTF-8', 'EUC-JP'); if(strstr($txt, 'レビューを見る(') !== false ){ echo $href . ' : ' . $txt . '<br>'; } } --------------------------- URL抜き出す条件はソース見ればわかるお。

ssaiew32
質問者

お礼

ありがとうございます。 無事目的のURLのみ抽出できました。

その他の回答 (2)

回答No.2

しょうがないなぁ。 ファイルをダウンロードしたら /example/example_basic_selector.php というファイルがあるから、 ブラウザからアクセスしてみよう。 すると、、、 あら不思議。 抽出されたURLが! 簡単だお。ソースコード必要ないお。

ssaiew32
質問者

補足

詳しい説明ありがとうございます。 無事にURLは抽出できましたが、不要なURLも大量に抽出してしまいます。 目的の↓このURLのみを抽出するにはexample_basic_selector.phpをどのように改良すればいいのでしょうか? ttp://review.rakuten.co.jp/item/1/229861_10000050/1.1/

回答No.1

これ。HTML解析する奴。 これ使ったら1発だお。 http://simplehtmldom.sourceforge.net/

ssaiew32
質問者

補足

リンク先にあるScraping Slashdot!を応用するのでしょうか?? もう少し具体的にソースコードを教えていただけると助かります。

関連するQ&A

  • PHPで他サイトにログインしてHTMLソースを取得

    PHPで他のサイトにログインしてHTMLソースを取得できますか? 例えば http://www.goo.ne.jp/ http://www.yahoo.co.jp/ http://jp.msn.com/ 上記それぞれのサイトにログインして メール受信件数を取得して、まとめて表示したいです。 静的HTMLページであれば file_get_contents関数で文字列として読み込み preg_matchで目的のHTML部分を正規表現で指定し explodeで分割して目的の部分だけを抽出 といったような流れで、だいたい可能なのは解かりました。 ただし、その前段階のphpで他のサイトにログインする方法が解かりません。 ログインの種類は、上記の例であげたように フォームタイプのログイン形式です。 Basic認証タイプではありません。 PHPで行う方法はあるのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでHTMLソースを取得する方法はありますか?

    PHPでHTMLソースを取得する方法はありますか? RSSで複数のHTMLソースを取得しました。 以下のことをやりたいのですが、こういったことは可能でしょうか? ・複数のHTMLソースを取得する(同じサイトからなのでタグの種類も大体同じものです) ・その中から<data>タグを取得する(dataの中にはそれぞれ適当な数字が入っています) ・それをソートして、ソート順にURLを表示する。 このようなことは可能でしょうか? $RSS=RSSのURL(XML) foreach($RSS as $value){ $URL[]=$value->URL; } for ($i = 0, $n = count($URL); $i < $n; $i++) { echo $URL[$i] . "<br />"; } これでそれぞれのURLが URL1 URL2 URL3 とそれぞれ表示されます。これらのURLからそれぞれの<data>タグを取得して上のようなことをやりたいです。 説明が下手で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで取得したHTMLソースと実際のソースの違い

    PHPで、 file_get_contents($uri) などで取得したHTMLソースと、実際にアクセスして表示したソースが違う場合があります。 例えば、ネットオフというサイトが違いました。 http://www.netoff.co.jp/cmdtyallsearch/hdnAllSearchFlg/1/Ctgry/home/LRack/*/SetFlg/?cat=&word=9784864102254 PHPで取得すると、商品結果の情報を取得できなかったのですが、 実際のソース(FireFoxでCtrl+Uでページのソース表示)は表示されています。 こういったページもPHPで取得することは可能なのでしょうか? わかる方よろしくおねがいします。

    • ベストアンサー
    • PHP
  • phpのHTMLからのRSS linkタグ抽出

    こんにちは phpを使ってrssを配信している サイトのhtmlデータを取得し、 rssのリンクが書いてある<link>タグを抽出しようとしています。 preg_matchなどを使った抽出の時に使っている正規表現は一応、 |.*<link rel=[\"\']alternate[\"\'](.*rss.*xml.*)?>|s なのですが、上記のrss xmlという文字列の順序や、 rssのバージョンを考えずに取得できる方法、 タグ内の他の属性値、属性値の順序など、 人によって書き方が異なり、 取得が難しいです。 これ以外の、より簡単な取得方法や、抽出におけるよい正規表現を知っておられる方、 どうか抽出方法を教えていただけませんでしょうか?

  • 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
  • phpでのURL取得について

    phpにて、ソース内のURLを取得するプログラムを作っています。 その中に短縮URLが混ざっており、取得しても例えば“http://tinyurl.com/?aaa”のような形になってしまいます。 この“http://tinyurl.com/?aaa”が“http://www.yahoo.co.jp/index.html”の短縮URLなら“http://www.yahoo.co.jp/index.html”の形で取得したいのですが、phpで可能でしょうか?

  • Perl HTMLソースから特定のタグ抽出

    use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'https://www.yahoo.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; $proxy->agent('your own created browser name here'); # 任意 $proxy->timeout(60); # 任意 my $req = HTTP::Request->new('GET' => $URL); my $res = $proxy->request($req); my $content = $res->content; print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる) if($res->is_success) { print $content; } else { print 'HTTP エラーコード: ' . $res->code; } これで、HTMLソース全てを取得することはできましたが、 例えば、このソースはヤフーのコードを取得していますが、 ヤフーのコード内で<li></li> リストタグないの文字列がほしいのですが、 どのように抽出すればいいのでしょうか? ヤフーでは、下記のようになっていて <li><a hrf="???????????????">ここの文字列<span>写真</span><span>new</span></li> このソースからここの文字列を抽出させたいです。 さらに、1番目の<li>内、4番目の<li>内といったことも実行したいです。 どうかご教示お願い致します。

  • VBAを使ってHTMLソースから特定の文字を抽出2

    前回ExcelでVBAを使って「http://www.nankankeiba.com/calendar/201204.do」のサイトからHTMLソースから<em></em>タグ内の<a href="URL">のURL情報だけを抽出するコードを教えて頂きました。 そこで、取り込んだデータの更に下に「http://www.nankankeiba.com/calendar/201210.do」からも同じように<em></em>タグ内のURLデータを取得して表示したいのですが、ページ移動しても同じ情報を取得したり上手くいかないのでアドバイス頂けないでしょうかm(_ _)m 上のURLだけを取り込むコードはこちらになります。 http://uproda.2ch-library.com/800072670/lib800072.txt イメージとしてこの様にしたいです。 http://uproda.2ch-library.com/800071Xz0/lib800071.jpg

  • PHP URL→HTML→取得→RSS出力

    PHP URL指定→HTMLソース→指定タグ要素取得(複数)→RSS(.xml)出力について URLからHTMLソースを取得し、要素を取得しRSSファイルを作りたいと思っています。 例えば、http://shopping.yahoo.co.jp/ranking/のURLのHTMLソース内から <p class="elPhoto"> <a href="○○○.html"> <img src="【取得したい文字列1】" width="200" height="200" alt="○○○"> </a> </p> <h4 class="elTitle"> <a href="【取得したい文字列2】">【取得したい文字列3】</a> </h4> <h4 class="elPrice"> <span>【取得したい文字列4】</span>円 </h4> <p class="elSellStatus"></p> <h4 class="elStore"> ストア:<a href="【取得したい文字列5】">【取得したい文字列6】</a> </h4> など指定する各要素を全件取得し、 <item> <title>【取得したい文字列3】</title> <link>【取得したい文字列2】</link> <description> 【取得したい文字列1】<br> 【取得したい文字列4】<br> 【取得したい文字列6】<br> 【取得したい文字列5】 </description> </item> などとRSSで全件出力し、xmlファイルを作成したいです。 アドバイス、ご指導お願いします。

    • 締切済み
    • PHP
  • 指定したURLのソース(HTML)を拾ってくるプログラム

    入力して指定したURLの先にあるソースファイル(HTML)を拾ってきて、URLの抽出や過去にとってきたソースと比較して更新されているかどうかをチェックするプログラムを作成しようと思っています。 これに類似したサンプルプログラム(スクリプト)や参考になるサイトを教えてもらえませんか。よろしくお願いします。

    • ベストアンサー
    • Perl