Je suis nouveau dans scrapy
et ma tâche est simple:
Pour un site e-commerce donné:
explorer toutes les pages du site Web
chercher la page des produits
Si l'URL pointe vers une page de produit
Créer un article
Traiter l'élément pour le stocker dans une base de données
J'ai créé l'araignée mais les produits sont simplement imprimés dans un fichier simple.
Ma question concerne la structure du projet: comment utiliser les éléments dans Spider et comment envoyer des éléments aux pipelines?
Je ne trouve pas d'exemple simple de projet utilisant des éléments et des pipelines.
Eh bien, l'objectif principal des éléments est de stocker les données que vous avez explorées. scrapy.Items
sont essentiellement des dictionnaires. Pour déclarer vos objets, vous devrez créer une classe et ajouter scrapy.Field
dedans:
import scrapy
class Product(scrapy.Item):
url = scrapy.Field()
title = scrapy.Field()
Vous pouvez maintenant l'utiliser dans votre araignée en important votre produit.
Pour des informations avancées, je vous laisse consulter le doc ici
Tout d'abord, vous devez dire à votre araignée d'utiliser votre custom pipeline
.
Dans le fichier settings.py :
ITEM_PIPELINES = {
'myproject.pipelines.CustomPipeline': 300,
}
Vous pouvez maintenant écrire votre pipeline et jouer avec votre objet.
Dans le fichier pipeline.py :
from scrapy.exceptions import DropItem
class CustomPipeline(object):
def __init__(self):
# Create your database connection
def process_item(self, item, spider):
# Here you can index your item
return item
Enfin, dans votre araignée , vous devez yield
votre article une fois qu'il est rempli.
spider.py exemple:
import scrapy
from myspider.items import Product
class MySpider(scrapy.Spider):
name = "test"
start_urls = [
'http://www.exemple.com',
]
def parse(self, response):
doc = Product()
doc['url'] = response.url
doc['title'] = response.xpath('//div/p/text()')
yield doc # Will go to your pipeline
J'espère que cela aide, voici le doc pour les pipelines : Item Pipeline