Использование нескольких парсеров при очистке страницы - PullRequest
0 голосов
/ 26 декабря 2018

Я искал некоторые вопросы по этой теме, но не смог найти решение своей проблемы.

В настоящее время я пытаюсь использовать несколько анализаторов на сайте в зависимости от продукта, который я хочупоиск.Попробовав несколько методов, я получил следующее:

С этим запросом на запуск:

def start_requests(self):

    txtfile = open('productosABuscar.txt', 'r')

    keywords = txtfile.readlines()

    txtfile.close()

    for keyword in keywords:

        yield Request(self.search_url.format(keyword))

Это входит в мой обычный parse_item.

То, что я хочу сделать, этос этим parse_item (путем проверки с категорией товара, такой как ноутбук, планшет и т. д.):

def parse_item(self,response):
        #I get the items category for the if/else
    category = re.sub('Back to search results for |"','', response.xpath('normalize-space(//span[contains(@class, "a-list-item")]//a/text())').extract_first())
        #Get the product link, for example (https://www.amazon.com/Lenovo-T430s-Performance-Professional-Refurbished/dp/B07L4FR92R/ref=sr_1_7?s=pc&ie=UTF8&qid=1545829464&sr=1-7&keywords=laptop)
    urlProducto = response.request.url

        #This can be done in a nicer way, just trying out if it works atm
    if category == 'Laptop':

        yield response.follow(urlProducto, callback = parse_laptop)

С:

def parse_laptop(self, response):

    #Parse things

Есть предложения?Ошибка, которую я получаю при запуске этого кода 'parse_laptop', не определена.Я уже пытался поместить parse_laptop выше parse_item, и я все еще получаю ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вам нужно обратиться к методу, а не к функции, поэтому просто измените его следующим образом:

yield response.follow(urlProducto, callback = self.parse_laptop)
0 голосов
/ 27 декабря 2018

yield response.follow(urlProducto, callback = parse_laptop) Это запрос, и вот вам функция def parse_laptop(self, response): вы, вероятно, заметили, что для вашей функции parse_laptop требуется собственный объект.поэтому, пожалуйста, измените ваш запрос на: yield response.follow(urlProducto, callback = self.parse_laptop) Это должно сделать работу.

Спасибо.

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