質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6682閲覧

【PHP】file_get_contentsの結果が空になってしまう

p-craft

総合スコア205

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/03/12 18:45

PHPのfile_get_contentsを使って、GoogleとYahooの検索結果を取得し、結果データを分析するプログラムを作成しています。

Googleの場合は、

php

1$html_contents=file_get_contents("http://www.google.co.jp/search?num=100&hl=ja&site=&source=hp&q="."キーワード");

という書き方で、PHPの場合は、

php

1$html_contents=file_get_contents("http://search.yahoo.co.jp/search?p="."キーワード"."&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt&n=100");

で、Googleの場合はうまく結果ページのHTMLが取得出来るのですが、Yahooの場合はデータが空になってしまいます。

ちなみに、file_get_contentsにセットしている値を、ブラウザのアドレスバーに入れた場合、正常に表示されます。

また、"キーワード"の部分は、urlencodeで、URLエンコードしています。

そんな状況なのですが、これは何かおかしいでしょうか?

YahooとGoogleで何か違いはあるのでしょうか?
または、検索エンジンの結果ページを取得するのに、何かいい方法はないものなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  • パラメータをpだけにすると表示されるようになりました.
  • file_get_contentsよりもcurl_*系の関数使ったほうが動作が高速になりやすいです.
  • リクエスト送りすぎるとIPアドレスで規制食らうので注意してください.

php

1<?php 2$keyword = 'teratail'; 3$ch = curl_init(); 4curl_setopt_array($ch, [ 5 CURLOPT_URL => 'http://search.yahoo.co.jp/search?p=' . urlencode($keyword), 6 CURLOPT_RETURNTRANSFER => true, 7 CURLOPT_ENCODING => 'gzip', 8]); 9$dom = new DOMDocument; 10@$dom->loadHTML(mb_convert_encoding(curl_exec($ch), 'HTML-ENTITIES', 'UTF-8')); 11$xpath = new DOMXPath($dom); 12$results = []; 13foreach ($xpath->query('//*[@id="web"]/ol/li') as $node) { 14 $results[] = [ 15 'url' => $xpath->evaluate('string(./a/@href)', $node), 16 'title' => $xpath->evaluate('normalize-space(./a)', $node), 17 'summary' => $xpath->evaluate('normalize-space(./div)', $node), 18 ]; 19} 20print_r($results);

投稿2016/03/12 20:18

編集2016/03/12 20:27
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

p-craft

2016/03/12 22:45

CertaiN様 わぁお!わぁお! ありがとうございます!CertaiN様は神様でございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問