Quelles sont les meilleures bibliothèques prédéfinies pour faire du Web Crawling en Python [duplicate]

StackOverflow https://stackoverflow.com/questions/421283

  •  05-07-2019
  •  | 
  •  

Question

Je dois explorer et stocker localement pour une analyse ultérieure le contenu d'une liste limitée de sites Web. En gros, je veux parcourir toutes les pages et suivre tous les liens internes pour obtenir l'intégralité du site accessible au public.

Existe-t-il des bibliothèques libres pour y arriver? J'ai vu Chilkat, mais c'est pour le salaire. Je cherche simplement une fonctionnalité de base ici. Pensées? Suggestions?

Copie exacte: Quelqu'un connaît-il un bon robot d'indexation Web basé sur Python que je pourrais utiliser?

Était-ce utile?

La solution

Utilisez Scrapy .

Il s’agit d’un framework de robot Web tordu. Encore en développement intense mais ça marche déjà. A beaucoup de goodies:

  • Prise en charge intégrée de l'analyse HTML, XML, CSV et Javascript
  • Un pipeline de supports permettant de récupérer des éléments contenant des images (ou tout autre support) et de télécharger également les fichiers image
  • Prise en charge de l'extension de Scrapy en ajoutant vos propres fonctionnalités à l'aide de middlewares, d'extensions et de 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 de l'agent utilisateur, de la gestion du fichier robots.txt, des statistiques, de la restriction de la profondeur d'analyse, etc.
  • Console de raclage interactive, très utile pour le développement et le débogage
  • Console de gestion Web pour surveiller et contrôler votre bot
  • Console Telnet pour un accès de bas niveau au processus Scrapy

Exemple de code permettant d'extraire des informations sur tous les fichiers torrent ajoutés aujourd'hui sur le site mininova , à l'aide d'un XPath sélecteur sur le code HTML renvoyé:

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]

Autres conseils

Avez-vous vraiment besoin d’une bibliothèque? Je recommande vivement Heritrix comme un excellent moteur de balayage à usage général qui préserve la totalité de la page Web (par opposition aux robots plus courants). qui stocke seulement une partie du texte). C'est un peu difficile sur les bords, mais fonctionne très bien.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top