Как удалить результаты Scrapy перед выводом в CSV - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь изолировать целое число от некоторого HTML, например «
5500 миль
».

import scrapy

class AlfaShortSpider(scrapy.Spider):
    name = 'alfashort'

    def start_requests(self):
        yield scrapy.Request(url = 'https://www.pistonheads.com/classifieds/used-cars/alfa-romeo/giulia',
                             callback = self.parse_data)


    def parse_data( self, response ):
        advert = response.xpath( '//*[@class="ad-listing"]')
        title = advert.xpath( './/*[@class="listing-headline"]//h3/text()' ).extract()
        price = advert.xpath( './/*[@class="price"]/text()' ).extract()
        mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()' ).extract()
        mileage = [item.strip() for item in mileage]
        mileage = [item.replace(',','') for item in mileage]
        mileage = [item.replace(' miles','') for item in mileage]

        for item in zip(title,price,mileage):
            price_data = {
                    'title' : item[0],
                    'price' : item[1],
                    'mileage' : item[2]
            }

            yield price_data 

Мой код успешно удаляет запятую и «мили», но в выводе CSV я получаю нежелательные пустые строки в этом столбце, которые, как я полагаю, связаны с возвратом каретки в исходном источнике. Мой CSV выглядит так:

мой CSV

Значит, заголовок и столбцы цены в порядке. Но в столбце Пробег указана ошибка.

что-то не так с моей командой Strip?

1 Ответ

1 голос
/ 30 апреля 2019

Просто поменяйте XPath на пробег

от

mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()' ).extract()

до

mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()[2]' ).extract()

Вы получите правильный вывод:

title,price,mileage
ALFA ROMEO GIULIA (0) V6 BITURBO QUADRIFOGLIO                  2018 (2018),"£48,500",5500
ULEZ CHARGE EXEMPT! EURO 6  (2017),"£25,695",11450
ALFA ROMEO GIULIA (0) V6 BITURBO QUADRIFOGLIO NRING            2019 (2019),"£83,500",100
ALFA ROMEO GIULIA (0) TD SPECIALE                              2017 (2017),"£22,500",23700
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...