ホームページ >バックエンド開発 >PHPチュートリアル >Web サイトからリンクやコンテンツを抽出するための単純な PHP クローラーを構築するにはどうすればよいですか?

Web サイトからリンクやコンテンツを抽出するための単純な PHP クローラーを構築するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-07 19:04:02920ブラウズ

How do I build a simple PHP crawler to extract links and content from a website?

シンプルな PHP クローラーの作成

Web サイトをクロールしてデータを抽出することは、Web プログラミングの一般的なタスクです。 PHP は、クローラーを構築するための柔軟なフレームワークを提供し、リモート Web ページにアクセスして情報を取得できるようにします。

特定の Web ページからリンクとコンテンツを収集する単純な PHP クローラーを作成するには、次のアプローチを利用できます。 :

DOM パーサーの使用:

<?php
function crawl_page($url, $depth = 5)
{
    // Prevent endless recursion and circular references
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    // Mark the URL as seen
    $seen[$url] = true;

    // Load the web page using DOM
    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    // Iterate over all anchor tags (<a>)
    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');

        // Convert relative URLs to absolute 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'] . '://';
                if (isset($parts['user']) &amp;&amp; isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1) . $path;
            }
        }

        // Recursively crawl the linked page
        crawl_page($href, $depth - 1);
    }

    // Output the crawled page's URL and content
    echo "URL: " . $url . PHP_EOL . "CONTENT: " . PHP_EOL . $dom->saveHTML() . PHP_EOL . PHP_EOL;
}
crawl_page("http://example.com", 2);
?>

このクローラーは、DOM パーサーを使用して Web ページの HTML 内を移動し、すべてのアンカー タグを識別し、リンクをたどります。それらには含まれています。リンクされたページのコンテンツを収集し、それを標準出力にダンプします。この出力をテキスト ファイルにリダイレクトして、収集したデータをローカルに保存できます。

追加機能:

  • 同じ URL を複数回クロールすることを防ぎます。
  • 相対 URL を正しく処理します。
  • http PECL 拡張機能を使用する場合、HTTPS、ユーザー認証、およびポート番号をサポートします。

以上がWeb サイトからリンクやコンテンツを抽出するための単純な PHP クローラーを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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