2009-01-07 4 views
0

J'ai besoin d'explorer et de stocker localement pour l'analyse future le contenu d'une liste finie de sites Web. Je veux fondamentalement slurp dans toutes les pages et suivre tous les liens internes pour obtenir l'ensemble du site accessible au public.Quelles sont les meilleures bibliothèques prédéfinies pour faire du Web Crawling en Python?

Existe-t-il des bibliothèques libres pour m'y amener? J'ai vu Chilkat, mais c'est pour payer. Je cherche juste la fonctionnalité de base ici. Pensées? Suggestions?


double exact: Anyone know of a good python based web crawler that I could use?

Répondre

7

Utilisez Scrapy.

Il s'agit d'un framework de robot Web à base torsadée. Encore en développement lourd mais ça marche déjà. A de nombreux goodies:

  • support intégré pour l'analyse syntaxique HTML, XML, CSV et Javascript
  • Un pipeline de médias pour gratter les articles avec des images (ou tout autre média) et télécharger les fichiers d'image et
  • Prise en charge de l'extension de Scrapy en connectant vos propres fonctionnalités à l'aide de middlewares, extensions et pipelines
  • Large gamme de middlewares et d'extensions intégrés pour la gestion de la compression, du cache, des cookies, de l'authentification, de l'usurpation d'user-agent, du traitement robots.txt, statistiques, restriction de profondeur de crawl, etc
  • console shell grattage interactif, très utile pour le développement et le débogage
  • console de gestion Web pour le suivi et le contrôle de votre robot
  • console Telnet pour un accès bas niveau au processus Scrapy

Exemple de code pour extraire des informations sur tous les fichiers torrent ajoutés aujourd'hui dans le site torrent mininova, en utilisant un sélecteur XPath sur le code HTML retourné:

class Torrent(ScrapedItem): 
    pass 

class MininovaSpider(CrawlSpider): 
    domain_name = 'mininova.org' 
    start_urls = ['http://www.mininova.org/today'] 
    rules = [Rule(RegexLinkExtractor(allow=['/tor/\d+']), 'parse_torrent')] 

    def parse_torrent(self, response): 
     x = HtmlXPathSelector(response) 
     torrent = Torrent() 

     torrent.url = response.url 
     torrent.name = x.x("//h1/text()").extract() 
     torrent.description = x.x("//div[@id='description']").extract() 
     torrent.size = x.x("//div[@id='info-left']/p[2]/text()[2]").extract() 
     return [torrent] 
0

Avez-vous vraiment besoin d'une bibliothèque? Je recommande fortement Heritrix comme un grand robot d'exploration général qui préservera l'ensemble de la page Web (par opposition aux robots d'exploration plus communs qui ne stockent qu'une partie du texte). C'est un peu rude sur les bords, mais fonctionne très bien.

Cela dit, vous pouvez essayer le moissonneur http://www.harvestmanontheweb.com/