Я получаю пустые массивы из просканированных данных с определенного веб-сайта, что может быть проблемой? - PullRequest
0 голосов
/ 12 июня 2019

Я получаю пустые массивы из просканированных данных с определенного веб-сайта, в чем может быть проблема?

import scrapy
from scrapy.loader import ItemLoader
from jumia.items import JumiaItem


class LaptopsSpider(scrapy.Spider):

    name="laptops"
    start_urls = [
        'https://www.jumia.co.ke/laptops/'
    ]

    def parse(self, response):
        for laptops in response.xpath("//div[contains(@class, '-gallery')]"):
            loader = ItemLoader(item=JumiaItem(), selector=laptops, response=response)
            loader.add_xpath('brand', ".//span[contains(@class, 'brand')]/text()")
            loader.add_xpath('name', ".//span[@class='name']/text()")
            loader.add_xpath('price', ".//span[@class='price-box ri']/span[contains(@class, 'price')][1]/span[@dir='ltr']/text()")
            loader.add_xpath('link', ".//a[@class='link']/@href")
            yield loader.load_item()
        next_page = response.xpath("//a[@title='Next']/@href").extract_first()

        if next_page is not None:
            next_page_link = response.urljoin(next_page)

            yield scrapy.Request(url=next_page_link, callback=self.parse)

1 Ответ

0 голосов
/ 12 июня 2019

Я зарегистрировался scrapy shell, и кажется, что есть некоторые блоки без необходимой информации. Проверьте эти результаты:

In [2]: len(response.xpath("//div[contains(@class, '-gallery')]").extract())
Out[2]: 48

In [3]: len(response.xpath("//div[contains(@class, '-gallery')]//span[contains(@class, 'brand')]").extract())
Out[3]: 40

Таким образом, есть 48 блоков, но только 40 из них действительны. Поэтому я предлагаю провести небольшую проверку необходимых данных в цикле for (например, проверить название или марку), а если их нет, просто continue.

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