Экспорт данных из лоскута в json, есть ли способ сохранить данные в соответствие с неравным количеством полей? - PullRequest
0 голосов
/ 14 апреля 2020

сначала спасибо за ваш интерес.

При попытке удалить данные с веб-сайта я сталкиваюсь со следующей проблемой: Есть некоторые поля, которые постоянно повторяются (цена, поверхность) во всех блоках на веб-странице. и некоторые, которые находятся только в некоторых блоках (например, прежняя цена, если цена за элемент снизилась).

Проблема, с которой я сталкиваюсь, заключается в том, что когда я экспортирую элементы как JSON, я имею для Пример 24 цены, 24 поверхности, которые кажутся выровненными (мое определение выровненного было бы получить согласованный Pandas DataFrame после импорта данных в DataFrame). Однако будет, например, только одна предыдущая цена и 17 экземпляров другой нерегулярной переменной (например, age), которая не будет поддерживать согласованность с предыдущими экземплярами.

Так же, как и в файле Json :

price: 
    1 : 100
    ...
    24: 120

price_old:
    1 : 110 # While it would be supposed to be at index 10 for example

Я пробовал несколько обходных путей, включая размещение операторов if для заполнения значения в переменной, если в селекторе For L oop нет ссылки на селектор. К сожалению, я не вижу возможности работать.

Ниже приведен мой (отредактированный) код, заранее благодарю за вашу драгоценную помощь.

import scrapy
from ..items import ScrapWebsiteItem

class ScrapWebsite(scrapy.Spider):
    name= "scrapwebsite"
start_urls=[
    "URL"
]

def parse(self, response):

    items = ScrapWebsiteItem()

    listblocks = response.css('selector')

    for block in listblocks:
        surface = block.css('selector').extract()
        price = block.css('selector').extract()

        if block.css('selector').extract() is not None:
            price_old= block.css('span.price-old::text').extract()
        else:
            price_old= price

        if block.css('selector').extract() is not None:
            age = block.css('selector').extract() # This element means there is a "New" banner displayed
        else:
            age = "Constructed" # If it's not new, it's already constructed


        items['surface']= surface
        items['price'] = price
        items['price_old'] = price_old
        items['age']= age

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