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 (он не может декодировать символ ☆, поэтому я попытался использовать кодировку):

  • Проблема с расширением строки Python
  • Python: как конвертировать из Windows 1251 в Unicode?
  • ElementTree и unicode
  • Печать СПИСОК символов unicode без символов escape
  • Как печатать текст с кодировкой UTF-8 на консоли в Python <3?
  • Устройство urllib2, которое не соответствует кодировке
  •  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.' 

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

  • Должен ли я использовать объявление кодирования в Python3?
  • Как я могу получить ссылки href из HTML с помощью Python?
  • Проблема с кодировкой при загрузке HTML с использованием mechanize и Python 2.6
  • Web Crawler Чтобы получить ссылки с нового сайта
  • Создайте файл csv utf-8 в Python
  • BeautifulSoup подсчитывает теги без разбора внутри них
  • 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 - лучший язык программирования в мире.