phpカールがデータをクロールできない問題を解決する方法
インターネットの急速な発展に伴い、クローラー技術はますます成熟してきました。クローラーを開発する場合、PHP CURL は古典的なクローラー ツールです。ただし、開発者によっては、PHP CURL を使用するときにデータをキャプチャできない状況に遭遇する場合があります。この場合はどうすればよいでしょうか?この記事では、PHP CURL がデータをキャプチャできない一般的な理由と解決策をいくつか紹介します。
1. ヘッダー情報が追加されていない
ほとんどすべての Web サイトは http リクエストをチェックします。ヘッダー情報が欠落している場合、サーバーによってアクセスが拒否される可能性があります。解決策は、PHP CURL でヘッダー情報を設定することです。次のように、curl_setopt 関数を使用して設定できます:
$header = array( 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
2.未処理のジャンプ
PHP Curl を使用して Web ページをクロールすると、一部の Web サイトがジャンプし、curl が操作を終了します。デフォルトでは。解決策は、次のように CURLOPT_FOLLOWLOCATION オプションを追加することです:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
3. 未処理の Cookie
多くの Web サイトでは、ユーザーの行動を記録するために Cookie が使用されています。Cookie が処理されていない場合、キャプチャされたコンテンツに問題が発生する可能性があります。 。解決策は、次のように、curl_setopt 関数を使用して CURLOPT_COOKIEFILE および CURLOPT_COOKIEJAR オプションを設定することです。
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
このうち、$cookie は、期限切れでない Cookie を保存するために使用されるファイル パスです。
4. タイムアウトが設定されていない
Webページをクロールする際、サーバーの応答時間が長すぎると、phpcurlが待機状態になる場合があります。この状況を回避するには、curl_setopt 関数を使用して、次のように CURLOPT_TIMEOUT オプションと CURLOPT_CONNECTTIMEOUT オプションを設定します:
curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
このうち、CURLOPT_TIMEOUT オプションはリクエスト全体のタイムアウトを秒単位で表し、CURLOPT_CONNECTTIMEOUT オプションは秒単位で表します。サーバーへの接続のタイムアウト。単位は秒です。
5. 正しいプロキシを使用していない
クローラーのアクセスを防ぐために、一部の Web サイトでは同じ IP からのリクエストを制限しています。解決策はプロキシを使用することです。次のように、curl_setopt 関数を使用して CURLOPT_PROXY オプションと CURLOPT_PROXYPORT オプションを設定します:
curl_setopt($ch, CURLOPT_PROXY, '代理服务器地址'); curl_setopt($ch, CURLOPT_PROXYPORT, '代理服务器端口');
6. SSL 検証がオンになっていません
一部の Web サイトでは、データ送信に SSL 暗号化プロトコルを使用する必要があります。 SSL 検証がオンになっていない場合、PHP CURL データはキャプチャされません。解決策は、次のように、curl_setopt 関数を使用して CURLOPT_SSL_VERIFYPEER オプションと CURLOPT_SSL_VERIFYHOST オプションを設定することです:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
このうち、CURLOPT_SSL_VERIFYPEER オプションはピア証明書を検証するかどうかを示し、 false は検証しないことを示します。オプションは証明書内の共通名をチェックするかどうかを示し、URI が一致するかどうかを確認するには false を使用してチェックしないことを示します。
上記は、PHP CURL がデータをキャプチャできない一般的な理由と解決策の一部です。クロールの失敗が発生した場合は、問題を段階的にトラブルシューティングし、さまざまな方法を使用して問題を解決する必要があります。私たちは、一生懸命努力を続ける限り、PHP CURL クローラー テクノロジを習得し、クローラー開発タスクを正常に完了できると信じています。
以上がPHPカールがクロールできないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。