如何处理Scrapy产量内的错误?

0yycz8jy  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(124)

我使用scrapy在每个产品URL中生成JSON格式,并创建我的.csv,这是非常好的工作。

def parse_variants(self, response):
        text = '.js'
        url = response.xpath('//link[2]/@href').get()
        full_url = url + text
        parsing = requests.get(full_url).json()
        for x in range(0,len(parsing['variants'])):
            yield {
                'added_on_store': parsing['created_at'],
                'type': parsing['type'],
                'product_name': parsing['title'],
                'variant_name': parsing['variants'][x]['title'],
                'current_price': (parsing['variants'][x]['price']) // 100,
                'original_price': parsing['variants'][x]['compare_at_price'],
                'bar_code/GTIN': parsing['variants'][x]['barcode']
            }

默认情况下,价格是4位数,我需要删除最后2位(这就是为什么我使用' //100')。它适用于'current_price',但不一定适用于'original_price',因为该值可以为空。
如果'original_price'为空,它将返回一个有意义的错误,因为它不能以100为底。
这就是为什么我希望有一个错误处理程序或一个默认参数,如果这是空的,但仍然使用'// 100',如果有东西。
有什么建议吗?

  • 谢谢-谢谢
nbnkbykc

nbnkbykc1#

最简单的方法是使用条件语句来设置值。
例如:

def parse_variants(self, response):
    text = '.js'
    url = response.xpath('//link[2]/@href').get()
    full_url = url + text
    parsing = requests.get(full_url).json()
    for x in range(0,len(parsing['variants'])):
        original_price = parsing['variants'][x]['compare_at_price']
        original_price = original_price // 100 if original_price else 0
        yield {
            'added_on_store': parsing['created_at'],
            'type': parsing['type'],
            'product_name': parsing['title'],
            'variant_name': parsing['variants'][x]['title'],
            'current_price': (parsing['variants'][x]['price']) // 100,
            'original_price': original_price,
            'bar_code/GTIN': parsing['variants'][x]['barcode']
        }

相关问题