2009-09-27 8 views
0

Je voudrais créer un robot en utilisant php qui me donnerait une liste de toutes les pages sur un domaine spécifique (à partir de la page d'accueil: www.example.com).de base questions d'exploration Web: Comment créer une liste de toutes les pages sur un site Web en utilisant php?

Comment puis-je faire cela en php?

Je ne sais pas comment trouver récursive toutes les pages sur un site Web à partir d'une page spécifique et à l'exclusion des liens externes.

+1

Êtes-vous cela pour coups de pied? Parce qu'il y a beaucoup de crawlers web pré-faits gratuits. – Fragsworth

Répondre

3

Pour l'approche générale, consultez les réponses à ces questions:

En PHP, vous devriez être en mesure d'aller chercher simplement une télécommande URL avec file_get_contents(). Vous pouvez effectuer une analyse syntaxique naïve du HTML en utilisant une expression régulière avec preg_match() pour trouver <a href=""> balises et analyser l'URL d'eux (Voir this question pour certaines approches typiques). Une fois que vous avez extrait l'attribut href brut, vous pouvez utiliser parse_url() pour entrer dans les composants et déterminer si c'est une URL que vous voulez récupérer - n'oubliez pas que les URL peuvent être relatives à la page que vous avez récupérée.

Bien que rapide, une expression régulière est pas la meilleure façon de l'analyse syntaxique HTML bien - vous pouvez également essayer le DOM classes pour analyser le code HTML vous allez chercher, par exemple:

$dom = new DOMDocument(); 
$dom->loadHTML($content); 

$anchors = $dom->getElementsByTagName('a'); 

if (count($anchors->length) > 0) { 
    foreach ($anchors as $anchor) { 
     if ($anchor->hasAttribute('href')) { 
      $url = $anchor->getAttribute('href'); 

      //now figure out whether to processs this 
      //URL and add it to a list of URLs to be fetched 
     } 
    } 
} 

Enfin, plutôt que d'écrire vous-même , voir aussi cette question pour d'autres ressources que vous pourriez utiliser.

0

Vue d'ensemble

Voici quelques notes sur les bases de la chenille.

It is a console app - It doesn't need a rich interface, so I figured a console application would do. The output is done as an html file and the input (what site to view) is done through the app.config. Making a windows app out of this seemed like overkill. 
The crawler is designed to only crawl the site it originally targets. It would be easy to change that if you want to crawl more than just a single site, but that is the goal of this little application. 
Originally the crawler was just written to find bad links. Just for fun I also had it collect information on page and viewstate sizes. It will also list all non-html files and external urls, just in case you care to see them. 
The results are shown in a rather minimalistic html report. This report is automatically opened in Internet Explorer when the crawl is finished. 

Obtenir le texte d'une page HTML

La première pièce cruciale de la construction d'un robot est le mécanisme pour sortir et aller chercher le code html hors de la bande (ou votre machine locale, si vous avez la site fonctionnant localement.). Comme beaucoup d'autres choses, .NET a des classes pour faire ceci même chose dans le cadre.

private static string GetWebText(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
     request.UserAgent = "A .NET Web Crawler"; 
     WebResponse response = request.GetResponse(); 
     Stream stream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(stream); 
     string htmlText = reader.ReadToEnd(); 
     return htmlText; 
    } 

La classe HttpWebRequest peut être utilisée pour demander n'importe quelle page d'Internet. La réponse (récupérée via un appel à GetResponse()) contient les données que vous voulez. Obtenez le flux de réponse, lancez-le dans un StreamReader, et lisez le texte pour obtenir votre code HTML. pour référence: font http://www.juicer.headrun.com

+0

La question concerne PHP. Comment un .NET répond-il? –

Questions connexes