ホームページ > バックエンド開発 > PHPチュートリアル > 複数のリンクからデータを収集する PHP Web クローラーを構築するにはどうすればよいですか?

複数のリンクからデータを収集する PHP Web クローラーを構築するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-08 06:50:02
オリジナル
531 人が閲覧しました

How to Build a PHP Web Crawler to Gather Data from Multiple Links?

PHP Web クローラー: 複数のリンクからデータを収集する

質問:

PHP を作成するWeb ページ上の複数のリンクからデータを取得し、ローカル ファイルに保存するスクリプト。

答え:

DOM と深さ制御の使用:

function crawl_page($url, $depth = 5)
{
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    $seen[$url] = true;

    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');
        // Handle relative URLs
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1).$path;
            }
        }
        crawl_page($href, $depth - 1);
    }

    // Output data
    echo "URL:", $url, PHP_EOL, "CONTENT:", PHP_EOL, $dom->saveHTML(), PHP_EOL, PHP_EOL;
}

// Usage
crawl_page("http://hobodave.com", 2);
ログイン後にコピー

注:

  • このバージョンでは、RegEx 解析よりも堅牢な DOM 解析が使用されます。
  • 相対的なものを処理します。 URL が正しく表示されます。
  • 無限ループを防ぐために深さ制御が採用されています。
  • 出力は STDOUT にエコーされ、ファイルにリダイレクトできます。

以上が複数のリンクからデータを収集する PHP Web クローラーを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート