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!