私が実現したいのは、毎回指定されたキーワードに基づいて Baidu の結果ページを検索することです。たとえば、Baidu の検索結果は次のようになります。Baidu のプロモーション コンテンツとテキストは次のとおりです。
そして、curl を使用して、結果は次のとおりです:
つまり、すべてのクロール結果は、Baidu が宣伝するコンテンツはクロールできないと言われています。始めたばかりなので、ご指導いただける師匠がいらっしゃいましたらお願いいたします。前もって感謝します。
PHP のクローリング コードは次のとおりです:
<?php$url = "http://www.baidu.com/s?wd=生命动力";// 构造包头,模拟浏览器请求$header = array ( "Host:www.baidu.com", "Content-Type:application/x-www-form-urlencoded",//post请求 "Connection: keep-alive", 'Referer:http://www.baidu.com', 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BIDUBrowser 2.6)');$ch = curl_init ();curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );// 执行$content = curl_exec ( $ch );if ($content == FALSE) { echo "error:" . curl_error ( $ch );}// 关闭curl_close ( $ch );//输出结果echo $content;?>
プロモートされたコンテンツは、ページがロードされてページに書き込まれた後に js を 2 回呼び出すことによって取得されます。したがって、curl を使用すると、HTML 内の情報のみを取得できます。
jsがロードされると、jsによって取得されたURLを取得するためにcurlを使用する必要があります。
プロモートされたコンテンツは、ページがロードされてページに書き込まれた後、js を 2 回呼び出すことによって取得されます。したがって、curl を使用すると、HTML 内の情報のみを取得できます。
jsがロードされると、jsによって取得されたURLを取得するためにcurlを使用する必要があります。
ユーザー エージェントが適切にシミュレートされていないため、機能しません。
実際、post を使用する必要はまったくなく、get を使用するだけです。
次のように変更します:
$url = "http://www.baidu.com/s?wd=生命动力";$header = array ( 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36');$ch = curl_init ();curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );// 执行$content = curl_exec ( $ch );if ($content == FALSE) { echo "error:" . curl_error ( $ch );}// 关闭curl_close ( $ch ); //输出结果echo $content;
ユーザー エージェントは適切にシミュレートされていないため、機能しません。
実際、post を使用する必要はまったくなく、get を使用するだけです。
次のように変更されました:
$url = "http://www.baidu.com/s?wd=生命动力";$header = array ( 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36');$ch = curl_init ();curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );// 执行$content = curl_exec ( $ch );if ($content == FALSE) { echo "error:" . curl_error ( $ch );}// 关闭curl_close ( $ch ); //输出结果echo $content;
ページに非表示のパラメータがあるかどうかを確認する必要があります。通常は、それらのパラメータが影響します。
例えばjsでもできます。そして、これは新しいスレッドで議論されるべきもう一つの問題です。