Как правильно настроить нумерацию страниц? - PullRequest
0 голосов
/ 08 февраля 2020

В настоящее время я работаю над кодом Scrapy, который будет извлекать 3 типа данных для каждого продукта. Я назвал данные "название, цена и рост c". Для каждого продукта я сделал свою программу способной правильно определять заголовок и цену, но у меня возникают проблемы с повышением c, так как повышение c находится на другой странице.

Что я хочу, чтобы моя программа делала для каждого продукта - извлечь заголовок и цену на главной странице, затем go на другой странице, чтобы извлечь код UP C. Как только он получит код c, я хочу, чтобы программа go перешла к следующему продукту на главной странице и повторила тот же метод для остальных продуктов.

Вот мой код.

import scrapy
from scrapy.utils.response import open_in_browser
from ..items import QuotetutorialItem

data={hidden}
headers={hidden}

class BrickseekSpider(scrapy.Spider):
    name = 'brickseek1'
    allowed_domains = ['brickseek.com']

    def start_requests(self):
        dont_filter = True
        yield scrapy.http.FormRequest(url='https://brickseek.com/login/', headers=headers, formdata=data,
                                      callback=self.parse)

    def parse(self, response):
        items = QuotetutorialItem()
        products = response.css('div.item-list__tile')

        for product in products:
            title = product.css('.item-list__title span::text').extract()
            price = product.css('.item-list__price-column--highlighted .price-formatted__dollars::text').extract()

        #another_page = response.css('div.item-list__tile a::attr(href)').get()
        #if another_page:
            #upc = product.css('div.item-overview__meta-item::text').extract()[6]
            #yield response.follow(another_page, callback=self.parse)

        items['title'] = title
        items['price'] = price
        #items['upc'] = upc

        yield items

1 Ответ

1 голос
/ 08 февраля 2020

Все, что вам нужно сделать, это поместить свой элемент (после заполнения заголовка, цены) в мета при посещении следующей страницы (при условии, что вы css селекторы верны)

def parse(self, response):
    items = QuotetutorialItem()
    products = response.css('div.item-list__tile')

    for product in products:
        item = QuotetutorialItem()
        item['title'] = product.css('.item-list__title span::text').extract()
        item['price'] = product.css('.item-list__price-column--highlighted .price-formatted__dollars::text').extract()
        another_page = response.css('div.item-list__tile a::attr(href)').get()
        if another_page:
            yield response.follow(another_page, callback=self.parse_upc,meta={'item':item})
        else:
            yield item

def parse_upc(self,response):
    item=response.meta['item']
    item['upc'] = product.css('div.item-overview__meta-item::text').extract()[6]
    yield item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...