Как конвертировать 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 см. документ (даже для нормализации)