Maison > développement back-end > tutoriel php > Comment puis-je créer un robot d'exploration PHP robuste en utilisant la manipulation DOM pour extraire des données de pages Web comportant plusieurs liens ?

Comment puis-je créer un robot d'exploration PHP robuste en utilisant la manipulation DOM pour extraire des données de pages Web comportant plusieurs liens ?

Mary-Kate Olsen
Libérer: 2024-11-08 07:11:01
original
979 Les gens l'ont consulté

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

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal