Vous n'êtes pas identifié(e).
Pages :: 1
Salut !
Je vous propose un petit robot python réalisé avec scrapy qui permet de crawler un site marchand et de recuperer des infos sur les produits (nom, prix, image et url).
J'ai suivi la doc ici : http://doc.scrapy.org/en/latest/intro/tutorial.html et j'ai fait quelques recherches pour parfaire le script (notamment sur stackoverflow.com)
Prérequis :
- installer scrapy
- créer un nouveau projet ( scrapy startproject mon_projet )
- renseigner le fichier items.py comme suit :
class MyItems(Item):
FULL_NAME = Field()
PRICE = Field()
IMAGE = Field()
DEEPLINK = Field()
pass
Voici le code :
# On importe les "items" du fichier items.py
from scrapcigaprix.items import MyItems
# On créer le robot en spécifiant son nom et le site à crawler
class MySpider(CrawlSpider):
name = "mon-robot"
allowed_domains = ["site-exemple.fr"]
start_urls = [
"http://url-exemple.fr",
]
# On utilise SgmlLinkExtractor avec follow=true pour recuperer toutes les url, en excluant celle qu'on ne veut pas (ici toutes les url contenant 'panier' ou 'html#')
rules = (
Rule(SgmlLinkExtractor(allow=(), deny=('panier', 'html#')), callback="parse_em1xam", follow="True"),
)
def parse_em1xam(self, response):
# grâce au selecteur et xpath, on selectionne dans chaque page le div avec l'id 'primary_block' (c'est souvent là que se trouvent les infos du produit)
sel = Selector(response)
sites = sel.xpath('//div[@id="primary_block"]')
items = []
# enfin on recupere les infos, les chemins xpath sont des exemples souvent rencontrés sur des sites prestashop
for site in sites:
item = MyItems()
item['DEEPLINK'] = response.url
item['FULL_NAME'] = site.xpath('//h1/text()').extract()
item['PRICE'] = site.xpath('//span[@id="our_price_display"]/text()').extract()
item['IMAGE'] = site.xpath('//img[@id="bigpic"]/@src').extract()
items.append(item)
return items
Et voilà, ensuite pour le lancer et recuperer le butin dans un fichier csv on utilise l'invit de commande : on se deplace dans le dossier du projet (exemple : cd Desktop/mon_projet) et on tape :
Et le tour est joué
Si vous avez des idées pour l'améliorer ou si vous savez comment faire pour traiter directement les infos obtenues je suis preneur ! ( pour l'instant j'importe manuellement le fichier dans une bdd et j'utilise des requetes sql pour faire le tri )
🔴 Hors ligne
Pour l'intégration de mysql : http://stackoverflow.com/questions/1084 … r-10849394
J'ai fais l'intégration de ArangoDB si besoin
CeKwa ?
🔴 Hors ligne
merci, c'est typiquement ce que je cherche à faire mais pas eu trop le temps de pousser le truc jusqu'à maintenant.
Par contre, je complèterai avec la gestion des proxy.
J'ai vu des bouts de code par ici : http://mahmoud.abdel-fattah.net/2012/04 … h-proxies/ ou par là http://mahmoud.abdel-fattah.net/2012/04 … y-proxies/ .
🔴 Hors ligne
Pages :: 1