ホームページ >バックエンド開発 >PHPチュートリアル >PHP 爬虫類開発におけるベスト プラクティスと経験の共有

PHP 爬虫類開発におけるベスト プラクティスと経験の共有

PHPz
PHPzオリジナル
2023-08-08 10:36:161284ブラウズ

PHP 爬虫類開発におけるベスト プラクティスと経験の共有

PHP クローラー開発のベスト プラクティスと経験の共有

この記事では、PHP クローラー開発のベスト プラクティスと経験、およびいくつかのコード例を共有します。クローラーは、Web ページから有用な情報を抽出するために使用される自動プログラムです。実際の開発プロセスでは、どのようにして効率的なクローリングを実現し、Web サイトによってブロックされないようにするかを考慮する必要があります。

1. クローラーのリクエスト間隔時間を合理的に設定する

クローラーを開発する場合、リクエストの間隔時間を合理的に設定する必要があります。リクエストを頻繁に送信しすぎると、サーバーが IP アドレスをブロックし、ターゲット Web サイトに圧力をかける可能性があるためです。一般に、1 秒あたり 2 ~ 3 つのリクエストを送信する方が安全な選択です。 sleep() 関数を使用すると、リクエスト間の遅延を実装できます。

sleep(1); // 设置请求间隔为1秒

2. ランダムな User-Agent ヘッダーを使用する

User-Agent ヘッダーを設定すると、ターゲット Web サイトによってクローラーとして認識されるのを避けるために、ブラウザーがリクエストを送信することをシミュレートできます。各リクエストで異なる User-Agent ヘッダーを選択して、リクエストの多様性を高めることができます。

$userAgents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36',
];

$randomUserAgent = $userAgents[array_rand($userAgents)];

$headers = [
    'User-Agent: ' . $randomUserAgent,
];

3. Web サイトのクロール防止メカニズムへの対処

クロールを防ぐために、多くの Web サイトは検証コードや IP 禁止などのクロール防止メカニズムを採用します。クロールする前に、Web ページに関連するクロール防止情報があるかどうかを確認し、存在する場合は、処理用の対応するコードを記述する必要があります。

4. 適切な HTTP ライブラリを使用する

PHP では、cURL、Guzzle など、さまざまな HTTP ライブラリから選択できます。必要に応じて、HTTP リクエストを送信し、応答を処理するための適切なライブラリを選択できます。

// 使用cURL库发送HTTP请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

5. キャッシュの合理的な使用

データのクロールは時間のかかる作業です。効率を高めるために、キャッシュを使用してクロールされたデータを保存し、リクエストの繰り返しを避けることができます。 Redis や Memcached などのキャッシュ ツールを使用したり、データをファイルに保存したりできます。

// 使用Redis缓存已经爬取的数据
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$response = $redis->get('https://www.example.com');

if (!$response) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.example.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    $redis->set('https://www.example.com', $response);
}

echo $response;

6. 例外とエラーの処理

クローラの開発では、ネットワーク接続のタイムアウトや HTTP リクエストのエラーなど、さまざまな例外やエラーを処理する必要があります。 try-catch ステートメントを使用すると、例外をキャッチし、それに応じて処理できます。

try {
    // 发送HTTP请求
    // ...
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

7. DOM を使用した HTML の解析

HTML からデータを抽出する必要があるクローラの場合、PHP の DOM 拡張機能を使用して HTML を解析し、必要なデータを迅速かつ正確に見つけることができます。

$dom = new DOMDocument();
$dom->loadHTML($response);

$xpath = new DOMXpath($dom);
$elements = $xpath->query('//div[@class="example"]');
foreach ($elements as $element) {
    echo $element->nodeValue;
}

要約:

PHP クローラー開発では、リクエスト間隔を合理的に設定し、ランダムな User-Agent ヘッダーを使用し、Web サイトのクロール防止メカニズムを処理し、適切な HTTP を選択する必要があります。キャッシュを賢く使用し、例外とエラーを処理し、DOM を使用して HTML を解析します。これらのベスト プラクティスと経験は、効率的で信頼性の高いクローラーの開発に役立ちます。もちろん、他にも調べて試してみるヒントやテクニックはあります。この記事がインスピレーションを与え、お役に立てば幸いです。

以上がPHP 爬虫類開発におけるベスト プラクティスと経験の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。