Паук Scrapy превращает float / int в строку - PullRequest
0 голосов
/ 10 сентября 2018

Я всегда получаю строку в своем результате, даже в экспортированном JSON.

Использование двойного перевода для замены всего.decimal_serializer был только для целей тестирования.Я вызвал print(value) внутри, и он вернул допустимое значение с плавающей точкой.В моем результате это всегда Unicode-строка.add_value('offerCountNew', 1.3) возвращает действительное значение с плавающей точкой в ​​моем результате.

Я также пытался удалить любой процессор или сериализатор.Любые идеи о том, что я делаю не так?

Item

offerCountNew = scrapy.Field(output_processor = TakeFirst(), serializer = decimal_serializer)

Паук

l.add_xpath('offerCountNew', 'number(translate(//*[@id="olp_feature_div"]//a[contains(@href, "new")], translate(//*[@id="olp_feature_div"]//a[contains(@href, "new")], "0123456789", ""), ""))')

Результат

 'offerCountNew': u'1.0',

JSON

 "offerCountNew": "1.0",

1 Ответ

0 голосов
/ 10 сентября 2018
def process_float_or_int(value):
    try:
        return eval(value)
    except:
        return value

offerCountNew = scrapy.Field(input_processor = MapCompose(lambda x: process_float_or_int(x)), output_processor = TakeFirst())
...