Ошибка значения недопустимого литерала с основанием 10 — Scrapy

#python

#python

Вопрос:

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

Ошибка значения: недопустимый литерал для int() с основанием 10: «

Я думаю, что понимаю проблему, поскольку она находит что-то, что не является целым числом, выглядит как пустое пространство некоторых видов, которое оно не может превратить в целое число. Нужно ли мне выполнять дополнительную очистку данных, прежде чем пытаться суммировать, или что-то еще, чего мне здесь может не хватать?

 class PsaSpider(scrapy.Spider):
    name = 't3'
    allowed_domains = ['psacard.com']
    start_urls = ['https://www.psacard.com/Pop/GetItemTable?headingID=51453amp;categoryID=20003amp;isPSADNA=falseamp;pf=0amp;_=1555080293549']

    def parse(self, response):
        def strip_second(sel, xpath):
            try:
                return sum([int(x.strip().replace(',', '')) for x in sel.xpath(xpath).extract() if u'-' not in x])
            except ValueError:
                pass 

        rows = response.css('table.pop-grid tbody tr')
        for row in rows:
            td = row.css('td')[0]
            yield {
            'name' : row.xpath('td[2]/strong//text()').extract_first(),
            'auth': strip_second(row, 'td[4]//text()'),
            'psa1': strip_second(row, 'td[5]//text()'),
            'psa1.5': strip_second(row, 'td[6]//text()'),
            'psa2': strip_second(row, 'td[7]//text()'),
            'psa3': strip_second(row, 'td[8]//text()'),
            'psa4': strip_second(row, 'td[9]//text()'),
            'psa5': strip_second(row, 'td[10]//text()'),
            'psa6': strip_second(row, 'td[11]//text()'),
            'psa7': strip_second(row, 'td[12]//text()'),
            'psa8': strip_second(row, 'td[13]//text()'),
            'psa9': strip_second(row, 'td[14]//text()'),
            'psa10': strip_second(row, 'td[15]//text()'),
            }
  

Комментарии:

1. может быть, сделайте что-то вроде int(x.strip().replace(',', '') or 0) , если то, что вы получаете, является пустой строкой. Если нет, то вам придется лучше очистить эту строку.

Ответ №1:

Отладьте то, что вы получаете в своих данных. Удалите неправильные данные, по крайней мере, с:

 data = [x.strip().replace(',', '') for x in sel.xpath(xpath).extract() if u'-' not in x]
return sum([int(x) for x in data if x])