Scrapy
Scrapy est un framework open-source permettant la création de robots d'indexation. Développé en Python, il dispose d'une forte communauté, offrant de nombreux modules supplémentaires. La première version stable a été publiée en [1]. Depuis, l'équipe de développement publie régulièrement de nouvelles versions dans le but d'enrichir le framework en fonctionnalité. L'objectif principal est d'obtenir une API stable pour la version 1.0[2]. Le framework dispose d'une communauté active, et un support commercial est effectué par plusieurs entreprises[3].
Le framework est compatible Python 2.7 et Python 3.6 ou au-dessus, sur la majorité des plates-formes.
Caractéristiques
L'équipe responsable du développement du framework lui confère plusieurs caractéristiques[4] :
- Simple : aucune notion avancée en Python n'est nécessaire pour utiliser Scrapy
- Productif : l'empreinte de code à générer est très courte, la plupart des opérations sont gérées par Scrapy
- Rapide : le framework est rapide, avec une gestion d'actions en parallèle notamment
- Extensible : chaque robot peut être personnalisés via des extensions, modifiant son comportement
- Portable : les robots Scrapy sont compatibles Linux, Windows, Mac et BSD
- Open Source
- Robuste, grâce à une batterie de tests effectuées aussi bien par les développeurs que la communauté
Exemple de robot
Le site web du projet propose un tutoriel détaillé sur l'utilisation de Scrapy[5]. Ce cours propose notamment plusieurs exemples, comme celui ci-contre, extrayant certains liens présents sur plusieurs pages web.
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import DmozItem
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ul/li')
items = []
for site in sites:
item = DmozItem()
item['title'] = site.select('a/text()').extract()
item['link'] = site.select('a/@href').extract()
item['desc'] = site.select('text()').extract()
items.append(item)
return items
Notes et références
- Scrapy 0.7 release candidate is available!, consulté le 17 août 2012
- Versioning and API Stability, consulté le 17 août 2012
- Scrapy Commercial support, consulté le 29 août 2012
- Scrapy overview, consulté le 17 août 2012
- Scrapy at a glance