Как преобразовать BeautifulSoup.ResultSet в строку - PullRequest
6 голосов
/ 16 октября 2011

Поэтому я проанализировал html-страницу с помощью .findAll (BeautifulSoup) для переменной с именем result. Если я наберу result в оболочке Python, а затем нажму Enter, я вижу обычный текст, как и ожидалось, но, поскольку я хотел постобработать этот результат как строковый объект, я заметил, что str(result) возвращает мусор, как в этом примере:

\xd1\x87\xd0\xb8\xd0\xbb\xd0\xbd\xd0\xb8\xd1\x86\xd0\xb0</a><br />\n<hr />\n</div>

Источник HTML-страницы имеет кодировку utf-8

Как я могу справиться с этим?


Код в основном такой, на случай, если это имеет значение:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib.open(url).read())
result = soup.findAll(something)

Python - 2,7

Ответы [ 4 ]

10 голосов
/ 26 марта 2012

Python 2.6.7 BeautifulSoup. версия 3.2.0

Это сработало для меня:

unicode.join(u'\n',map(unicode,result))

Я почти уверен, что result - это BeautifulSoup.ResultSet объект, который, кажется, является расширением стандартного списка питонов

3 голосов
/ 22 августа 2013
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib.open(url).read())
#findAll should get multiple parsed result
result = soup.findAll(something)
#then iterate result
for line in result:
    #get str value from each line,replace charset with utf-8 or other charset you need
    print line.__str__('charset')

Кстати: версия BeautifulSoup - beautifulsoup-3.2.1

0 голосов
/ 16 октября 2011

Используйте это:

unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore')

Юникод имеет несколько форм нормализации Этот вывод не должен быть мусором.
Используйте атрибут originalEncoding для проверки схемы кодирования.
Что касается реализации юникода в python, см. этот документ (даже для нормализации)

0 голосов
/ 16 октября 2011

Это не мусор, это текст в кодировке UTF-8. Вместо этого используйте Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...