ホームページ >バックエンド開発 >PHPチュートリアル >curl または file_get_content を使用してデータをフェッチできないのはなぜですか?
curl または file_get_content を使用してデータを取得できないのはなぜですか?
Baidu の経験では、たとえば http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html、
ページのソース コードを直接見ると、記事データがあります。
しかし、curlとfile_get_content.を使うと記事内容が正常に取得できません。
これはなぜですか? IPアドレスや送信元などを偽造しましたが、それでも取得できません。 Baidu はどのようにしてデータ クロールを防止しますか?
以下はコードです:
rrree
curl はこのページのコンテンツのみをクロールしますが、このページにはクロールでは埋めることができない他の多くの動的コンテンツがあります
このページのコンテンツのみをキャプチャしますが、このページにはクローリングでは埋められない他の動的コンテンツがたくさんあります。
記事データは動的ではないはずです。 表示できるコードを確認してみましょう。このページはクロールでき、ログインせずに表示できます。検索エンジン スパイダーもクロールできます。なぜ今、curl でクロールできないのですか?
function fcontents( $url, $timeout = 5, $referer = "" ){ $ch = curl_init(); $header = array ( 'User-Agent: Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36','X-FORWARDED-FOR:154.125.25.15', 'CLIENT-IP:154.125.25.15' ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //构造用户IP curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com/");//构造来路 $result = curl_exec($ch); curl_close($ch); return $result;}$html = fcontents('http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html');echo $html;
$url = "http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html";$cookie_jar = dirname(__FILE__)."/jy.cookie";/* 获取cookie */$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);curl_exec($ch);curl_close($ch);
クッキーがないからかもしれません。最初にクッキーを追加します。
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);curl_setopt($ch, CURLOPT_HEADER, 0);$res = curl_exec($ch);curl_close($ch);echo $res;
$url = "http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html";$cookie_jar = dirname(__FILE__)."/jy.cookie";/* 获取cookie */$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);curl_exec($ch);curl_close($ch);
だからクッキーはありません。最初にクッキーを追加します。
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);curl_setopt($ch, CURLOPT_HEADER, 0);$res = curl_exec($ch);curl_close($ch);echo $res;
$url = "http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html";$cookie_jar = dirname(__FILE__)."/jy.cookie";/* 获取cookie */$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);curl_exec($ch);curl_close($ch);
だからクッキーはありません。最初にクッキーを追加します。
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);curl_setopt($ch, CURLOPT_HEADER, 0);$res = curl_exec($ch);curl_close($ch);echo $res;
$url = "http://jingyan.baidu.com/article/00a07f38441c3782d028dc04.html";$cookie_jar = dirname(__FILE__)."/jy.cookie";/* 获取cookie */$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);curl_exec($ch);curl_close($ch);