Explorer avec PHP : un guide complet
Pour extraire des données d'une page Web contenant plusieurs liens, PHP offre diverses possibilités. Une approche consiste à utiliser des expressions régulières, mais il est essentiel d'éviter de s'appuyer uniquement sur elles pour l'analyse HTML.
Implémentation du robot d'exploration basé sur DOM
Le robot d'exploration basé sur DOM de Tatu fournit une alternative fiable. Voici une version améliorée :
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; }
Cette version améliorée prend en compte divers scénarios d'URL, notamment https, utilisateur, pass et port.
Améliorations
George a souligné un bug dans la version originale, qui ajoute des URL relatives à la fin du chemin de l'URL au lieu de l'écraser. Par conséquent, ce problème a été résolu, garantissant que les URL relatives se comportent comme prévu.
Sauvegarde de la sortie
La version modifiée du robot renvoie sa sortie vers STDOUT, vous permettant pour le rediriger facilement vers un fichier de votre choix.
En incorporant ces améliorations, ce robot d'exploration basé sur DOM fournit une solution robuste pour extraire des données à partir de pages Web avec plusieurs liens en PHP.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!