Как устранить ошибку ValueError: невозможно преобразовать в Excel? (Использование Python и openpyxl)

Я собираю цену с веб-сайта, используя lxml, и я хотел бы вставить эту цену в существующий файл Excel с помощью openpyxl. Когда я запускаю код, я получаю сообщение об ошибке «ValueError: Невозможно преобразовать ['364 $] в Excel» (' 364 $ - это списанная цена). Как я могу это исправить? Похоже, что проблема в строке 11 кода: sheet['A1'] = price. Мой код enitre ниже.

from lxml import html
import requests
page = requests.get('http://www.randomlengths.com/Woodwire/RL-Lbr-Pnl/')
tree = html.fromstring(page.content)
price = tree.xpath('//*[@id="main-frame"]/div/div[1]/table/tbody/tr[2]/td[2]/strong/text()')
print(price)

import openpyxl
xfile = openpyxl.load_workbook('C:/Users/noah.merkousko/randomlengthslumber.xlsx')
sheet = xfile.get_sheet_by_name('Framing Lumber')
sheet['A1'] = price
xfile.save('random lengths lumber test.xls') 

person Scooter    schedule 12.03.2019    source источник


Ответы (2)


«ValueError: Cannot convert ['$ 364'] to Excel» сообщает вам об ошибке. Вы пытаетесь поместить список ['$364'] в ячейку, содержащую значения. Вы можете исправить это, либо индексируя, когда вы помещаете его в Excel, либо индексируя, когда он анализируется из Интернета.

Опция 1:

price = tree.xpath('//*[@id="main-frame"]/div/div[1]/table/tbody/tr[2]/td[2]/strong/text()')[0] # index at 0

Вариант 2:

sheet['A1'] = price[0] # index when you put into Excel

Стоит отметить, что это может привести к IndexValue ошибке, если сайт был изменен и значение больше не находится в '//*[@id="main-frame"]/div/div[1]/table/tbody/tr[2]/td[2]/strong/text()', но в противном случае ваша проблема должна быть решена.

person Reedinationer    schedule 12.03.2019
comment
Привет, @Reedinationer, спасибо за помощь. Похоже, что если я объединю оба варианта, которые вы выложили в свой код, это решит ошибку ValueError. Однако он помещает только $ в файл Excel. Он не помещает полную цену в 364 доллара в файл Excel. Какие-либо предложения? - person Scooter; 13.03.2019
comment
@Scooter Не совмещайте их. Используя один, вы получите первый элемент в списке (строка "$ 364"). Использование другой опции в сочетании с ней позволит получить первый элемент в строке (символ «$»). Я имел в виду, что у вас есть два способа решить вашу проблему, и вы должны выбрать один вариант. - person Reedinationer; 13.03.2019
comment
когда я использую только один из предложенных вами вариантов, я все равно получаю ValueError. Не знаю почему. - person Scooter; 14.03.2019

Вы можете поймать ошибку как исключение.

try:
    sheet['A1'] = price
except ValueError:
    print("Handling the error case")
person Jack    schedule 12.03.2019
comment
Привет @Jack, спасибо за помощь. Похоже, это решило ошибку ValueError, но не помещает никаких данных в файл Excel. Есть идеи, почему это может происходить? - person Scooter; 13.03.2019