BeautifulSoupTag, строки и UnicodeEncodeError не так красивы - PullRequest
0 голосов
/ 30 января 2012

Этим утром я потратил несколько разочаровывающих часов, пытаясь обработать строки из очищенных веб-страниц.Кажется, я не могу получить последовательный способ уменьшить регистр извлеченной строки, чтобы я мог проверить ключевые слова - и это сводит меня с пути.

Вот фрагмент кода, который извлекает текст из элемента DOM:

temp = i.find('div', 'foobar').find('div')
if temp is not None and temp.contents is not None:
    temp2 = whitespace.sub(' ', temp.contents[0])
    content = str(temp2)

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xa0' в позиции 150: порядковый номер не в диапазоне (128)

Я такжепробовал следующие утверждения - ни один из которых не работал;т. е. они привели к одной и той же ошибке:

content = (str(temp2)).decode('utf-8').lower()
content = str(temp2.decode('utf-8')).lower()

Кто-нибудь знает, как преобразовать текст, содержащийся в BeautifulSoupTag, в строчный ASCII, чтобы я мог выполнять поиск по ключевым словам без учета регистра?1013 *

1 Ответ

2 голосов
/ 30 января 2012

Возможно, вы захотите ASCII, но вам нужен Unicode, и вполне вероятно, что вы его уже получили. XML-парсеры возвращают unicode объектов.

Сначала сделайте print type(temp2) ... Это должно быть unicode, если не случилось что-то неудачное, например, может быть, whitespace.sub() штуковина; что это?

Если вы хотите нормализовать несколько пробельных символов в один пробел, выполните

temp2 = u' '.join(temp.contents[0].split())

Это приведет к исчезновению этого противного u '\ xA0', потому что это пробел (NO-BREAK SPACE).

Тогда попробуйте content = temp2.lower()

...