BeautifulSoup не дает мне Unicode - PullRequest
4 голосов
/ 07 июля 2010

Я использую Красивый суп для очистки данных. В документации BS говорится, что BS всегда должна возвращать Unicode, но я не могу получить Unicode. Вот фрагмент кода

import urllib2
from libs.BeautifulSoup import BeautifulSoup

# Fetch and parse the data
url = 'http://wiki.gnhlug.org/twiki2/bin/view/Www/PastEvents2007?skin=print.pattern'

data = urllib2.urlopen(url).read()
print 'Encoding of fetched HTML : %s', type(data)

soup = BeautifulSoup(data)
print 'Encoding of souped up HTML : %s', soup.originalEncoding 

table = soup.table
print type(table.renderContents())

Исходные данные, возвращаемые со страницы, представляют собой строку. BS показывает оригинальную кодировку как ISO-8859-1. Я думал, что BS автоматически конвертирует все в Unicode, так почему, когда я делаю это:

table = soup.table
print type(table.renderContents())

.. это дает мне строковый объект, а не Unicode?

Как я могу получить объекты Unicode из BS?

Я действительно, очень потерян с этим. Любая помощь? Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 11 августа 2010

Как вы могли заметить, renderContent возвращает (по умолчанию) строку, закодированную в UTF-8, но если вы действительно хотите использовать строку Unicode, представляющую весь документ, вы также можете сделать Unicode (суп) или декодировать выходные данные renderContents / prettify.использование Юникода (soup.prettify (), "utf-8").

Связано

2 голосов
/ 07 июля 2010

originalEncoding - это именно то, что является исходной кодировкой, поэтому тот факт, что BS хранит все как Unicode внутри, не изменит это значение.Когда вы гуляете по дереву, все текстовые узлы имеют Unicode, все теги имеют Unicode и т. Д., Если вы не преобразуете их иным образом (скажем, с помощью print, str, prettify или renderContents).

Попробуйте сделать что-то вроде:

soup = BeautifulSoup(data)
print type(soup.contents[0])

К сожалению, все, что вы делали до этого момента, нашло очень мало методов в BS, которые конвертируют в строки.

...