Heim >Backend-Entwicklung >PHP-Tutorial >Wie baue ich einen einfachen PHP-Crawler, um Links und Inhalte von einer Website zu extrahieren?

Wie baue ich einen einfachen PHP-Crawler, um Links und Inhalte von einer Website zu extrahieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 19:04:02926Durchsuche

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

Einen einfachen PHP-Crawler erstellen

Das Crawlen von Websites und das Extrahieren von Daten ist eine häufige Aufgabe in der Webprogrammierung. PHP bietet ein flexibles Framework zum Erstellen von Crawlern, mit dem Sie auf Informationen von Remote-Webseiten zugreifen und diese abrufen können.

Um einen einfachen PHP-Crawler zu erstellen, der Links und Inhalte von einer bestimmten Webseite sammelt, können Sie den folgenden Ansatz verwenden :

Verwendung eines DOM-Parsers:

<?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);
?>

Dieser Crawler verwendet einen DOM-Parser, um durch den HTML-Code der Webseite zu navigieren, alle Anker-Tags zu identifizieren und allen Links zu folgen sie enthalten. Es sammelt den Inhalt der verlinkten Seiten und gibt ihn in die Standardausgabe aus. Sie können diese Ausgabe in eine Textdatei umleiten, um die gesammelten Daten lokal zu speichern.

Zusätzliche Funktionen:

  • Verhindert das mehrfache Crawlen derselben URL.
  • Verarbeitet relative URLs korrekt.
  • Unterstützt HTTPS, Benutzerauthentifizierung und Portnummern bei Verwendung der http-PECL-Erweiterung.

Das obige ist der detaillierte Inhalt vonWie baue ich einen einfachen PHP-Crawler, um Links und Inhalte von einer Website zu extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn