首頁  >  文章  >  後端開發  >  如何建立一個簡單的 PHP 爬蟲來從網站中提取連結和內容?

如何建立一個簡單的 PHP 爬蟲來從網站中提取連結和內容?

Linda Hamilton
Linda Hamilton原創
2024-11-07 19:04:02823瀏覽

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

建立一個簡單的 PHP 爬蟲

爬取網站並提取資料是 Web 程式設計中的常見任務。 PHP 提供了一個靈活的框架來建立爬蟲,讓您可以存取和檢索遠端網頁的資訊。

要建立一個簡單的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 解析器可瀏覽網頁的HTML、識別所有錨標記並追蹤它們包含的任何連結。它收集連結頁面的內容並將其轉儲到標準輸出中。您可以將此輸出重定向到文字文件,以在本地保存收集的資料。

其他功能:

  • 防止多次抓取相同 URL。
  • 正確處理相對 URL。
  • 支援 HTTPS、使用者驗證和使用 http PECL 擴充功能時的連接埠號碼。

以上是如何建立一個簡單的 PHP 爬蟲來從網站中提取連結和內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn