2011-03-27 3 views
0

Disons que j'ai une araignée crawl similaire à cet exemple: de scrapy.contrib.spiders importer CrawlSpider, la règle de SgmlLinkExtractor import scrapy.contrib.linkextractors.sgml de scrapy. sélecteur importation HtmlXPathSelector d'importation scrapy.item articleScrapy CrawlSpider post-traitement: Trouver un moyen

class MySpider(CrawlSpider): 
    name = 'example.com' 
    allowed_domains = ['example.com'] 
    start_urls = ['http://www.example.com'] 

    rules = (
     # Extract links matching 'category.php' (but not matching 'subsection.php') 
     # and follow links from them (since no callback means follow=True by default). 
     Rule(SgmlLinkExtractor(allow=('category\.php',), deny=('subsection\.php',))), 

     # Extract links matching 'item.php' and parse them with the spider's method parse_item 
     Rule(SgmlLinkExtractor(allow=('item\.php',)), callback='parse_item'), 
    ) 

    def parse_item(self, response): 
     self.log('Hi, this is an item page! %s' % response.url) 

     hxs = HtmlXPathSelector(response) 
     item = Item() 
     item['id'] = hxs.select('//td[@id="item_id"]/text()').re(r'ID: (\d+)') 
     item['name'] = hxs.select('//td[@id="item_name"]/text()').extract() 
     item['description'] = hxs.select('//td[@id="item_description"]/text()').extract() 
     return item 

Disons que je voulais obtenir des informations comme la somme des ID de chacune des pages, ou le nombre moyen de caractères dans la description sur l'ensemble des pages analysées. Comment je le ferais?

En outre, comment pourrais-je obtenir des moyennes pour une catégorie particulière?

+0

Pour une raison quelconque, je ne peux pas obtenir les instructions d'importation dans le bloc de code. – Muhd

Répondre

3

Vous pouvez utiliser le stats collector de Scrapy pour créer ce type d'information ou rassembler les données nécessaires pour le faire au fur et à mesure. Pour les statistiques par catégorie, vous pouvez utiliser une clé de statistiques par catégorie.

Pour un vidage rapide de toutes les statistiques collectées lors d'une exploration, vous pouvez ajouter STATS_DUMP = True à votre settings.py.

Redis (via redis-py) est aussi une excellente option pour la collecte de statistiques.

+0

Comment est-ce que je pourrais imprimer les stats dans un fichier? – Muhd

+0

En fait, ce que je voudrais vraiment, c'est un moyen d'écrire du code arbitraire qui interagit avec les statistiques finalisées. – Muhd