Я пытаюсь прочитать html-файл на своем диске. Я использую BeautifulSoup для работы с тегами в нем. Мой файл можно скачать here. Я получаю эту ошибку unicode при попытке распечатать теги <p>
. Я даже не могу хранить теги <p>
в другом файле. :UnicodeEncodeError при чтении тегов из html-данных
Traceback (most recent call last):
File "C:\Users\admin\Desktop\HTMLdownload\HTMLdownload\src\Extract images and caption.py", line 61, in <module>
print(img_data)
Traceback (most recent call last):
File "C:\Users\admin\Desktop\HTMLdownload\HTMLdownload\src\Extract images and caption.py", line 57, in <module>
print(cap_data)
File "c:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2212' in position 330: character maps to <undefined>
Вот мой код:
loC# some location on disk
soup = BeautifulSoup(open(loc,'r'),"html.parser")
fig_data= soup.select("dl.figure")
for i in fig_data:
img_data=i.select("img.figure")
print(img_data)
cap_data=i.select(".caption p")
print(cap_data)
В этом коде я пытаюсь получить теги изображения и соответствующие надписи. Из этих тегов изображений я возьму ссылки на изображения.
Чтобы решить, я уже пытался кодировать UTF-8 или другие варианты, как магнезии (cap_data), но до сих пор я получаю эту ошибку, используя Python 3.
Проблемные текст следующим образом:
<p id="">Weight change of <em>A. caliginosa</em> in pots containing Springmount soil kept at 15<sup>°</sup>C (±1°C) for 10 weeks. Vertical bars represent standard errors of the means, <em>n</em>=10. Bars with same letters are not significantly different at the 5% level. C6=<em>A. caliginosa</em> at a density of 6 worms pot<sup>−1</sup>. C12=<em>A. caliginosa</em> at a density of 12 worms pot<sup>−1</sup>. CL=<em>A. caliginosa</em> and <em>A. longa</em> at a density of 6 worms pot<sup>−1</sup> each.</p>
Данные вне вашей программы закодированы. Поэтому перед тем, как передать его в Beautiful Soup, вы должны _decode_ его. – holdenweb
@holdenweb Я получаю сообщение об ошибке AttributeError: объект 'str' не имеет атрибута 'decode', когда я пытаюсь напрямую декодировать содержимое из файла – user3050590
Извините: более пристальный взгляд на трассировку указывает на то, что проблема скорее является символом ввода, который может 't быть представленным в кодировке Windows, используемой вашим терминалом. Вы пытались записать вывод в файл с кодировкой UTF-8? – holdenweb