Как конвертировать BeautifulSoup.Набор в строку

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

xd1x87xd0xb8xd0xbbxd0xbdxd0xb8xd1x86xd0xb0</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 ответов


Python 2.6.7 BeautifulSoup.версия 3.2.0

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

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

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


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')

BTW: версия BeautifulSoup-beautifulsoup-3.2.1


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


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

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

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