2016-03-04 15 views
0

Я пытаюсь прочитать 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>&deg;</sup>C (&plusmn;1&deg;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>&minus;1</sup>. C12=<em>A. caliginosa</em> at a density of 12 worms pot<sup>&minus;1</sup>. CL=<em>A. caliginosa</em> and <em>A. longa</em> at a density of 6 worms pot<sup>&minus;1</sup> each.</p> 
+0

Данные вне вашей программы закодированы. Поэтому перед тем, как передать его в Beautiful Soup, вы должны _decode_ его. – holdenweb

+0

@holdenweb Я получаю сообщение об ошибке AttributeError: объект 'str' не имеет атрибута 'decode', когда я пытаюсь напрямую декодировать содержимое из файла – user3050590

+0

Извините: более пристальный взгляд на трассировку указывает на то, что проблема скорее является символом ввода, который может 't быть представленным в кодировке Windows, используемой вашим терминалом. Вы пытались записать вывод в файл с кодировкой UTF-8? – holdenweb

ответ

0

Как показывает трассировка, вы должны repr(img_data). Смотрите также other questions по этой теме. Увы, нет ни одной канонической цели (пока).

+0

Я пробовал, но по-прежнему не могу помочь .. Он все еще не умеет печатать cap_data. img_data Я могу напечатать – user3050590

+0

, поэтому, очевидно, вам нужно напечатать (repr (cap_data)) ' –

+0

извините за мою ошибку в вопросе, но я уже пробовал, что – user3050590

Смежные вопросы