Framework Scrapy basé sur le langage Python

Framework Scrapy basé sur le langage Python

La petite histoire:

Scrapy est un framework basé sur le langage Python qui vous permettra de scraper avec vos propres spiders! En gros et pour faire simple, vous pourrez créer votre propre bot. Ce framework a vue le jour (1ère version stable) en 2009. What? Mer.. alors! Il y a presque 4 que ça existe et je le découvre maintenant.

Je reviens, je pars me fouetter à sang…

re…

Présentations des dossiers:

Bon je pars du principe que vous avez installé python 2.7, que vous avez fait votre virtualenv et que vous y ayez installé scrapy grâce à PIP!

(Bon je sens qu’ici j’ai déjà perdu 95% de ceux qui me lisent…)

Une fois donc votre projet lancé

scrapy startproject myfuckingbot

Vous aurez un dossier myfuckingbot de créer avec cette arborescence:

myfuckingbot/
    scrapy.cfg
    myfuckingbot/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

Settings.py

Vous aurez deviné que c’est dans settings.py qu’il faudra configurer votre bot et pour cela commençons par lui donner un nom

BOT_NAME = ‘Mongentilbot’

Mais aussi pour faire du scrap responsable:

USER_AGENT = ‘Mongentilbot (+http://www.yourdomain.com)’

Et oui, votre propre UA!

Vous pourrez aussi définir comme sauvegarder votre scrape

ITEM_PIPELINES = [
    'myfuckingbot.pipeline.JsonWriterPipeline',
]

JsonWriterPipeline correspond à la class du fichier pipelines.py

pipelines.py

Dans Pipelines.py on définit comment enregistrer nos données qui seront envoyées par notre spider.

import json

class JsonWriterPipeline(object):

    def __init__(self):
        self.file = open('items.json', 'wb')

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"
        self.file.write(line)
        return item

Pour faire simple les données seront dans le fichier items.json ligne par ligne en json.

Items.py

Bon ici on va définir comme les champs à sauver qui seront envoyés par le spider! (Put… on y arrive bientôt au spider ^^!)

from scrapy.item import Item, Field

class FirstspiderItem(Item):
    url = Field()

Créer son Spider!

On fonce dans le dossier spiders maintenant et on va crée un fichier monpremierspider.py

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

from myfuckingbot.items import FirstspiderItem #On importe la class de items.py

class MycoolSpider(CrawlSpider):
    name = 'botone' #le nom avec lequel on lancera la commande plus bas

    start_urls = ['http://kaos-idea.com']

    rules = [
        Rule(SgmlLinkExtractor(allow='kaos\-idea\.com\/category\/[a-z0-9-_/]+')), #On commence du général
        Rule(SgmlLinkExtractor(allow='kaos\-idea\.com\/[a-z0-9-_/]+'), 'parse_article') #au particulier avec le callback ci-dessous

    ]
    def parse_article(self, response):
        item = FirstspiderItem()
        item['url'] = response.url
        return item

On se met dans l’environnement virtuel via le terminal (oui ici on bosse sous un système Linux car faire du python avec windows c’est comme bouffer une glace sans cornet! Tu es vite saoulé!)

Bref, (monenvvirtuel)pathversledossiermyfuckingbot je peux commencer à taper ma commande:

scrapy crawl botone

Pour le peu d’urls que j’ai sur le site on a même pas eu le temps de cligner des yeux que le fichier s’est créé.

Bon évidemment, c’est un aperçu très minime de ce que l’on peut faire avec scrapy.

Je vous invite donc à découvrir Scrapy car c’est carrément un framework conçu pour scraper!

Tu cherches un IDE pour faire du Python sous Linux, je conseille NINJA_IDE qui est gratuit.

468 ad

Submit a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>