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.