Premiers pas avec Scrapy sous Mac OS X

Premiers pas avec Scrapy sous Mac OS X

Scrapy est un framework open source dédié au crawl et au scrap de sites web. On peut l'utiliser pour de nombreux usages : récupérer des contenus sur un site, auditer, récupérer de grandes portions du web, constituer des corpus, analyser des schémas de linking...

Se lancer dans de grandes manœuvres est tentant, mais c'est aussi le meilleur moyen de laisser penser que Scrapy est particulièrement complexe. Pour les tâches basiques, voire moyennement complexes, sachez-le, Scrapy est vraiment facile à mettre en oeuvre. La preuve par l'exemple.

D'ailleurs, dans les Masterclass, on l'utilise pour plusieurs usages 😉

Installer scrapy sous Mac Os X

(si vous êtes sous linux ou windows, Scrapy se configure de la même façon, mais s'installe différemment. Suivez la doc)

Vérifier votre version de Python

terminal$ /usr/bin/env python -V

Si le terminal affiche une version de Python en 2.7.x, c'est tout bon. Sinon, il faut installer Python 2.7.x en se rendant sur le site officiel de python : https://www.python.org/download/ et en choisissant un package 2.7.x pour Mac OS X.

Installer xcode

terminal$ xcode-select --install

Installer Scrapy

terminal$ sudo -E easy_install scrapy

Voilà, Scrapy est installé :

terminal$ scrapy

Cette ligne de commande devrait vous le confirmer 🙂

Pour se mettre en appétit et constater qu'utiliser scrapy n'est pas forcément complexe, lançons-nous dans une tâche de mini-audit : vérifier comment sont remplies les titres des pages d'un site web.

Utiliser Scrapy pour vérifier les balises <title> d'un site

On crée un nouveau projet (auquel on donne le nom "super"):

terminal$ scrapy startproject super

Puis on va éditer les fichiers de configuration :

dans super/super/setting.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
BOT_NAME = 'super'
SPIDER_MODULES = ['super.spiders']
NEWSPIDER_MODULE = 'super.spiders'
 
#on interroge doucement le site : on attend 5 secondes entre chaque requête
DOWNLOAD_DELAY = 5
 
#On décide d'enregistrer les datas générées par le crawl dans liste.csv
FEED_URI = 'liste.csv'
 
#on retient le format csv comme format de fichier pour les datas récoltées
FEED_FORMAT = 'csv'
FEED_EXPORTERS_BASE = {
'csv': 'scrapy.contrib.exporter.CsvItemExporter',
}
 
#on peut modifier le user agent à renvoyer au site crawlé ;)
USER_AGENT = 'super (+http://www.example.org)'

dans super/super/items.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from scrapy.item import Item, Field
 
class SuperItem(Item):
    # on veut récupérer des datas : url / titre
    url = Field()
    titre = Field()
    pass

dans super/super/spiders/mySuper.py (oui, il faut créer le fichier !)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from super.items import SuperItem
from scrapy.selector import Selector
 
class mySuper(CrawlSpider):
    name="super"
    #on autorise seulement le crawl du site indiqué dans allowed_domains
    allowed_domains = ['www.example.org']
 
    #démarrage sur la page d'accueil du site
    start_urls = ['http://www.example.org']
 
    rules = (Rule (SgmlLinkExtractor(allow=(),deny=(),restrict_xpaths=()), callback="parse_o", follow= True),)
 
    def parse_o(self,response):
        #récupération des datas récoltées (contenu de la page)
        sel = Selector(response)
 
        #on prépare item, on va le remplir (souvenez-vous, dans items.py)
        item = SuperItem()
 
        #on stocke l'url de la page dans le tableau item
        item['url'] = response.url
 
        #on récupère le titre de la page ( titre ) grâce à un chemin xpath
        item['titre'] = sel.xpath('//title/text()').extract()
 
        # on fait passer item à la suite du processus
        yield item

Il suffit maintenant de lancer le spider et d'attendre que le fichier csv se remplisse tout seul.

terminal$ scrapy crawl super

Voilà, on ouvre maintenant le fichier dans excel, openoffice, libreoffice, ou dans n'importe quel fichier capable de lire du csv (pourquoi pas un import dans une base de données pour faire des traitements annexes ?).

Scrapy est assez facilement adaptable à beaucoup de problématiques liées à l'exploration de pages web. Apprenez à l'utiliser et vous aurez un bel outil, plutôt polyvalent et performant, à ajouter à votre arsenal de référenceur.


 

N'hésitez pas à venir à l'une de nos Masterclass pour découvrir d'autres usages de Scrapy.