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
Freigeben: 2024-11-08 07:11:01
Original
978 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage