Scrapy Следующая страница не перенаправляет - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь очистить списки продуктов MercadoLibre.Я использую Scrapy 1.5.0.Когда Scrapy пытается перейти на следующую страницу, она перебирает первую и вторую страницы.

Код

# Python 3.5
# Scrapy 1.5.0

import scrapy
from scrapy.http import Request

class MercadoLibreSpider(scrapy.Spider):
    name = "mlspider"
    allowed_domains = ['mercadolibre.com.ar']
    start_urls = ['https://listado.mercadolibre.com.ar/microondas#D[A:microondas]']

def parse(self, response):
    # Prices
    priceData = response.css(".price__fraction::text").extract()
    # Product Listings
    titleData = response.css(".main-title::text").extract()

    for i in range(len(priceData)):
        yield {
            'title':titleData[i],
            'price':priceData[i]
        }
    # Pagina siguiente
    nextPage = response.css('.andes-pagination__link::attr(href)').extract_first()
    if nextPage is not None:
        yield Request(url=nextPage, callback=self.parse)

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Более надежный способ - использовать контейнеры и проходить через них для сбора titles и prices.

import scrapy
from scrapy.http import Request

class MercadoLibreSpider(scrapy.Spider):
    name = "mlspider"
    start_urls = ['https://listado.mercadolibre.com.ar/microondas#D[A:microondas]']

    def parse(self, response):
        for item in response.css(".results-item"):
            titleData = item.css(".main-title::text").extract_first()
            priceData = item.css(".price__fraction::text").extract_first()
            yield {
                 'title':titleData,
                 'price':priceData
            }

        nextPage = response.css('a.prefetch::attr(href)').extract_first()
        if nextPage:
            yield Request(url=nextPage, callback=self.parse)
0 голосов
/ 11 октября 2018

РЕДАКТИРОВАТЬ

Я нашел другое решение.Ищите класс «предварительной выборки»

<a class="andes-pagination__link prefetch" href="https://listado.mercadolibre.com.ar/electrodomesticos/coccion/microondas/microondas_Desde_49">2</a>

Исправление кода

import scrapy
from scrapy.http import Request

class MercadoLibreSpider(scrapy.Spider):
    name = "mlspider"
    allowed_domains = ['mercadolibre.com.ar']
    start_urls = ['https://listado.mercadolibre.com.ar/microondas#D[A:microondas]']

    def parse(self, response):
        # Prices
        priceData = response.css(".price__fraction::text").extract()
        # Product Listings
        titleData = response.css(".main-title::text").extract()

        for i in range(len(priceData)):
            yield {
                 'title':titleData[i],
                 'price':priceData[i]
            }
        # Next Page, using the prefetch identifier
        nextPage = response.css('a.prefetch::attr(href)').extract_first()
        if nextPage is not None:
            yield Request(url=nextPage, callback=self.parse)
...