BeautifulSoup4 stripped_strings дает мне байтовые объекты?

Я пытаюсь получить текст из блока, который выглядит так:

<blockquote class="postcontent restore "> 01 Oyasumi <br></br> 02 DanSin' <br></br> 03 wts <br></br> 04 Lovism <br></br> 05 NoName <br></br> 06 Gakkou <br></br> 07 Happy☆Day <br></br> 08 Endless End. </blockquote> 

Я пытаюсь сделать это в python 2.7 (он не может декодировать символ ☆, поэтому я попытался использовать кодировку):

 soup = BeautifulSoup(r.text, "html5lib") #r is from a requests get request content = soup.find("blockquote", {"class": "postcontent restore "}).stripped_strings for line in content: print(line.encode("utf-8")) 

И это то, что я получаю:

 b'01 Oyasumi' b"02 DanSin'" b'03 wts' b'04 Lovism' b'05 NoName' b'06 Gakkou' b'07 Happy\xe2\x98\x86Day' b'08 Endless End.' 

Что я делаю не так?

One Solution collect form web for “BeautifulSoup4 stripped_strings дает мне байтовые объекты?”

Проблема в том, что Beautiful Soup преобразует исходную кодировку в Unicode, если from_encoding не указан с помощью from_encoding Unicode, Dammit . Дополнительная информация в разделе « Кодировки » в документации.

 >>> from bs4 import BeautifulSoup >>> doc = '''<blockquote class="postcontent restore "> ... 01 Oyasumi ... <br></br> ... 02 DanSin' ... <br></br> ... 03 wts ... <br></br> ... 04 Lovism ... <br></br> ... 05 NoName ... <br></br> ... 06 Gakkou ... <br></br> ... 07 Happy☆Day ... <br></br> ... 08 Endless End. ... </blockquote>''' >>> soup = BeautifulSoup(doc, 'html5lib') >>> soup.original_encoding u'windows-1252' >>> content = soup.find("blockquote", {"class": "postcontent restore "}).stripped_strings >>> for line in content: ... print(line) ... 01 Oyasumi 02 DanSin' 03 wts 04 Lovism 05 NoName 06 Gakkou 07 Happy☆Day 08 Endless End. 

Чтобы исправить это, у вас есть два варианта:

  1. Переходя в правильном параметре from_encoding или исключая неправильное неправильное кодирование, Dammit гадает. Одна из проблем заключается в том, что не все Parsers поддерживают аргумент exclude_encodings . Например, html5lib tree builder не поддерживает exclude_encoding

     >>> soup = BeautifulSoup(doc, 'html5lib', from_encoding='utf-8') >>> content = soup.find("blockquote", {"class": "postcontent restore "}).stripped_strings >>> for line in content: ... print(line) ... 01 Oyasumi 02 DanSin' 03 wts 04 Lovism 05 NoName 06 Gakkou 07 Happy☆Day 08 Endless End. >>> 
  2. Использование анализатора lxml

     >>> soup = BS(doc, 'lxml') >>> soup.original_encoding 'utf-8' >>> content = soup.find("blockquote", {"class": "postcontent restore "}).stripped_strings >>> for line in content: ... print(line) ... 01 Oyasumi 02 DanSin' 03 wts 04 Lovism 05 NoName 06 Gakkou 07 Happy☆Day 08 Endless End. 
  • Уроки Python и unicode
  • Как обрабатывать строки юникода Python с нулевым байтом «правильный»?
  • Python "\ x00" заполняется / utf-32 строка из cStringIO
  • Scrapy xpath utf-8 литералы
  • Форматирование столбцов, содержащих символы не-ascii
  • Как отправить символы Unicode с помощью httplib?
  • Пробелы исчезли из извлечений PDF и странная интерпретация слов
  • Python: конвертировать сложный словарь строк из Unicode в ASCII
  •  
    Interesting Posts for Van-Lav

    Jinja2 в Google App Engine

    Вероятностное сопоставление строк в Python

    Как показать несколько изображений на одном рисунке?

    Преобразование эпохи в дату и время

    Как использовать статический метод в качестве параметра по умолчанию для шаблона проектирования стратегии?

    Версия TensorFlow версии 1.0.0-rc2 для Windows: «OpKernel (« op: «BestSplits» device_type: «CPU») для неизвестного оп: BestSplits »с тестовым кодом

    Устранение неполадок / обходной проблемы блокировки, которая, как представляется, связана с GIL

    Смешение абстрактного класса и namedtuple

    Производительность библиотеки itertools по сравнению с кодом python

    Как сравнить словари и посмотреть, что изменилось?

    Как представить матрицы в python

    Новичок Python, имеющий проблемы с использованием классов

    Как я могу ограничить объем процесса многопроцессорности?

    Сериализация JSON моделей Google App Engine

    Условно оцененные операторы отладки в Python

    Python - лучший язык программирования в мире.