Maison >développement back-end >tutoriel php >Comment créer un robot d'exploration PHP simple pour extraire les liens et le contenu d'un site Web ?

Comment créer un robot d'exploration PHP simple pour extraire les liens et le contenu d'un site Web ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-07 19:04:02920parcourir

How do I build a simple PHP crawler to extract links and content from a website?

Création d'un robot d'exploration PHP simple

Explorer des sites Web et extraire des données est une tâche courante dans la programmation Web. PHP fournit un cadre flexible pour créer des robots d'exploration, vous permettant d'accéder et de récupérer des informations à partir de pages Web distantes.

Pour créer un robot d'exploration PHP simple qui collecte les liens et le contenu d'une page Web donnée, vous pouvez utiliser l'approche suivante :

Utilisation d'un analyseur DOM :

<?php
function crawl_page($url, $depth = 5)
{
    // Prevent endless recursion and circular references
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    // Mark the URL as seen
    $seen[$url] = true;

    // Load the web page using DOM
    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    // Iterate over all anchor tags (<a>)
    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');

        // Convert relative URLs to absolute URLs
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) &amp;&amp; isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1) . $path;
            }
        }

        // Recursively crawl the linked page
        crawl_page($href, $depth - 1);
    }

    // Output the crawled page's URL and content
    echo "URL: " . $url . PHP_EOL . "CONTENT: " . PHP_EOL . $dom->saveHTML() . PHP_EOL . PHP_EOL;
}
crawl_page("http://example.com", 2);
?>

Ce robot utilise un analyseur DOM pour naviguer dans le code HTML de la page Web, identifie toutes les balises d'ancrage et suit tous les liens. ils contiennent. Il collecte le contenu des pages liées et le transfère dans la sortie standard. Vous pouvez rediriger cette sortie vers un fichier texte pour enregistrer les données collectées localement.

Fonctionnalités supplémentaires :

  • Empêche d'explorer la même URL plusieurs fois.
  • Gère correctement les URL relatives.
  • Prend en charge HTTPS, l'authentification des utilisateurs et les numéros de port lors de l'utilisation de l'extension http PECL.

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!

Déclaration:
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