Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich mithilfe der DOM-Manipulation einen robusten PHP-Crawler zum Extrahieren von Daten aus Webseiten mit mehreren Links erstellen?

Wie kann ich mithilfe der DOM-Manipulation einen robusten PHP-Crawler zum Extrahieren von Daten aus Webseiten mit mehreren Links erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 07:11:011058Durchsuche

How can I build a robust PHP crawler using DOM manipulation for extracting data from web pages with multiple links?

Crawling mit PHP: Eine umfassende Anleitung

Um Daten aus einer Webseite zu extrahieren, die mehrere Links enthält, bietet PHP verschiedene Möglichkeiten. Ein Ansatz beinhaltet die Verwendung regulärer Ausdrücke, aber es ist wichtig, sich beim HTML-Parsen nicht ausschließlich auf sie zu verlassen.

DOM-basierte Crawler-Implementierung

Tatu's DOM-basierter Crawler bietet eine zuverlässige Alternative. Hier ist eine verbesserte Version:

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) {
        $path = $element->getAttribute('href');
        if (0 !== strpos($path, 'http')) {
            $path = '/' . ltrim($path, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) && isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1).$path;
            }
        }
        crawl_page($href, $depth - 1);
    }
    echo "URL:", $url, PHP_EOL, "CONTENT:", PHP_EOL, $dom->saveHTML(), PHP_EOL, PHP_EOL;
}

Diese verbesserte Version berücksichtigt verschiedene URL-Szenarien, einschließlich https, Benutzer, Pass und Port.

Verbesserungen

George hat auf einen Fehler in der Originalversion hingewiesen, der relative URLs an das Ende des URL-Pfads anhängt, anstatt ihn zu überschreiben. Folglich wurde dieses Problem behoben und sichergestellt, dass sich relative URLs wie erwartet verhalten.

Ausgabe speichern

Die modifizierte Version des Crawlers gibt ihre Ausgabe an STDOUT zurück, sodass Sie um es bequem in eine Datei Ihrer Wahl umzuleiten.

Durch die Integration dieser Verbesserungen bietet dieser DOM-basierte Crawler eine robuste Lösung für Extrahieren von Daten aus Webseiten mit mehreren Links in PHP.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe der DOM-Manipulation einen robusten PHP-Crawler zum Extrahieren von Daten aus Webseiten mit mehreren Links erstellen?. 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