Удалите \ t от начала и конца ответа Scrapy - PullRequest
0 голосов
/ 07 марта 2019

Я хочу убрать свой ответ Scrapy. Я покупаю простой ценовой монитор, но у меня проблемы с получением чистой цены.

Я получаю следующий ответ:

['\n\t\t\t\t\t\t\t\t\t\t\t\t272.28€\t\t\t\t\t\t\t\t\t\t\t']

В идеале я бы хотел, чтобы это было (в поплавке?):

272.28

Я использую предметы скрапа для хранения таких значений, как:

def parse_item(self, response):
    item = HobbyItem()
    item['new_price'] = response.css('span.price.new-price').extract()
    item['base_price'] = response.css('span.price.base-price').extract()

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 07 марта 2019

Поскольку кажется, что текст находится в списке, вам сначала нужно извлечь текст из списка, а затем убрать его

>>> response = ['\n\t\t\t\t\t\t\t\t\t\t\t\t272.28€\t\t\t\t\t\t\t\t\t\t\t']
>>> text = response[0]
'\n\t\t\t\t\t\t\t\t\t\t\t\t272.28€\t\t\t\t\t\t\t\t\t\t\t'
>>> clean_text = text.strip()
'272.28€'
>>> number_text = clean_text.replace("€", "")
'272.28'
>>> number = float(number_text)
272.28

или в виде одной строки:

>>> response = ['\n\t\t\t\t\t\t\t\t\t\t\t\t272.28€\t\t\t\t\t\t\t\t\t\t\t']
>>> float(response[0].strip().replace("€", ""))
272.28
0 голосов
/ 07 марта 2019

После всей помощи это решение, которое сработало для меня (далеко не самое эффективное)

def parse_item(self, response):
    item = HobbyItem()
    if response.css('span.price.new-price::text').extract():
        new_price = response.css('span.price.new-price::text').extract()
        new_price_clean = new_price[0]
        new_price_clean_strip = new_price_clean.strip()
        new_price_clean_euro = new_price_clean_strip.replace("€", "")
        final_new_price = float(new_price_clean_euro)
        item['new_price'] = final_new_price
    else:
        item['new_price'] = '0'
    if response.css('span.base-price::text').extract():
        new_price = response.css('span.base-price::text').extract()
        new_price_clean = new_price[0]
        new_price_clean_strip = new_price_clean.strip()
        new_price_clean_euro = new_price_clean_strip.replace("€", "")
        final_new_price = float(new_price_clean_euro)
        item['base_price'] = final_new_price
    else:
        item['base_price'] = '0'
    if response.css('span.price::text').extract():
        new_price = response.css('span.price::text').extract()
        new_price_clean = new_price[0]
        new_price_clean_strip = new_price_clean.strip()
        new_price_clean_euro = new_price_clean_strip.replace("€", "")
        final_new_price = float(new_price_clean_euro)
        item['price'] = final_new_price
    else:
        item['price'] = '0'
    item['name'] = response.css('h1>span::text').extract()
    item['url'] = response.url
    yield item
0 голосов
/ 07 марта 2019

Используйте это:

def parse_item(self, response):
   item = HobbyItem()
   item['new_price'] = response.css('span.price.new-price::text').get().replace('€', '').strip()
   item['base_price'] = response.css('span.price.base-price::text').get().replace('€', '').strip()

Здесь метод get () извлекает первый элемент, соответствующий методу css и strip, удаляя лишние символы. Вы можете узнать больше в здесь

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