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

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

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

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

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

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

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

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

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

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

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


person farhawa    schedule 11.05.2017    source источник


Ответы (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

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

person Adrien Blanquer    schedule 12.05.2017
comment
Что бы вы конкретно сюда поставили? - # Here you can insert your item - person Maverick; 27.09.2017
comment
В этом примере конвейер используется для вставки просканированных данных в базу данных. В функции process_item вы будете использовать API базы данных для индексации просканированных данных в базе данных. Итак, что именно я туда помещаю, зависит от базы данных, которую я использую. - person Adrien Blanquer; 27.09.2017
comment
Спасибо за разъяснение, не могли бы вы вставить пример? - person Maverick; 27.09.2017
comment
на самом деле def __init(self) а не def __init__(self)?!?! - person oldboy; 01.07.2018