пользовательский процессор вывода scrapy - PullRequest
0 голосов
/ 20 ноября 2018

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

У меня есть класс элементов, подобный так:

class Item(scrapy.Item)

    ad_type = scrapy.Field()

тогда моя функция разбора выглядит примерно так.У меня есть 2 очищенные строки, которые я добавляю в ad_type.Я хочу, чтобы моя функция выходного процессора присваивала теги, основываясь на том, что извлечено из этих 2 xpath.

def parse(self, response):

    l = ItemLoader(item=Item(), selector=listing)
    l.add_xpath('ad_type', '(.//div/@class)[1]')
    l.add_xpath('ad_type', '(.//div[contains(@class, "brand")]/@class)[1]')
    yield l.load_item()

Как мне получить функцию выходного процессора для доступа к 2 очищенным строкам xpath, которые я добавил в ad_type?Документы по Scrapy дают этот пример, но я не могу заставить его работать.

def lowercase_processor(self, values):
    for v in values:
        yield v.lower()

class MyItemLoader(ItemLoader):
    name_in = lowercase_processor

1 Ответ

0 голосов
/ 20 ноября 2018

Вы назвали своего загрузчика MyItemLoader, но ваш паук использует ItemLoader (вероятно, scrapy's).
Если вы обновите свой код для использования пользовательского загрузчика, вы должны получить желаемый результат.

Я бы также рекомендовал не называть ваш класс предметов Item, так как это может сбить с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...