Scrapy: как использовать элементы в пауке и как отправлять элементы в конвейеры?

Я новичок в scrapy и моя задача проста:

Для данного веб-сайта электронной коммерции:

  • сканировать все страницы веб-сайта

  • искать страницу продуктов

  • Если URL-адрес указывает на страницу продукта

  • Создать элемент

  • Обработать элемент, чтобы сохранить его в базе данных

Я создал паука, но продукты просто напечатаны в простом файле.

Мой вопрос касается структуры проекта: как использовать элементы в пауке и как отправлять элементы в конвейеры?

Я не могу найти простой пример проекта с использованием элементов и конвейеров.

Ответ 1

  • Как использовать предметы в моем пауке?

Ну, главное назначение элементов - хранить данные, которые вы просканировали. scrapy.Items в основном словари. Чтобы объявить свои предметы, вам нужно будет создать класс и добавить в него scrapy.Field:

import scrapy

class Product(scrapy.Item):
    url = scrapy.Field()
    title = scrapy.Field()

Теперь вы можете использовать его в своем пауке, импортируя ваш продукт.

Для получения дополнительной информации, я позволю вам проверить документ здесь

  • Как отправить товар в конвейер?

Во-первых, вы должны сказать своему пауку, чтобы он использовал ваш custom pipeline.

В файле settings.py:

ITEM_PIPELINES = {
    'myproject.pipelines.CustomPipeline': 300,
}

Теперь вы можете написать свой конвейер и поиграть со своим предметом.

В файле 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

Наконец, в вашем пауке вы должны yield свой предмет, как только он будет заполнен.

Пример spider.py:

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

Надеюсь, это поможет, вот документация для конвейеров: Item Pipeline