7

BeautifulSoup を使用してページからすべてのテキストを取得する必要があります。BeautifulSoup のドキュメントでは、これを実行できることが示さsoup.get_text()れています。reddit.com でこれを実行しようとすると、次のエラーが発生しました。


UnicodeEncodeError in soup.py:16
  'cp932' codec can't encode character u'\xa0' in position 2262: illegal multibyte sequence

チェックしたほとんどのサイトでそのようなエラーが発生します。
私も同様のエラーが発生しsoup.prettify()ましたが、に変更して修正しましたsoup.prettify('UTF-8')。これを修正する方法はありますか?前もって感謝します!

6 月 24 日更新
他のユーザーでも機能すると思われるコードを少し見つけましたが、それでもデフォルトの代わりに UTF-8 を使用する必要があります。コード:


texts = soup.findAll(text=True)

   def visible(element):
      if element.parent.name in ['style', 'script', '[document]', 'head', 'title']:
         return False
      elif re.match('', str(element)): return False
      elif re.match('\n', str(element)): return False
      return True

   visible_texts = filter(visible, texts)

   print visible_texts

ただし、エラーは異なります。進捗?


UnicodeEncodeError in soup.py:29
'ascii' codec can't encode character u'\xbb' in position 1: ordinal not in range
(128)
4

2 に答える 2

1

soup.get_text() は Unicode 文字列を返すため、エラーが発生します。

これは、シェル レベルでエンコーディングを設定するなど、さまざまな方法で解決できます。

export PYTHONIOENCODING=UTF-8

これをスクリプトに含めることで、sys をリロードしてエンコーディングを設定できます。

if __name__ == "__main__":
  reload(sys)
  sys.setdefaultencoding("utf-8")

または、文字列をコードで utf-8 としてエンコードできます。あなたのredditの問題では、次のようなものがうまくいきます:

import urllib
from bs4 import BeautifulSoup

url = "https://www.reddit.com/r/python"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)

# get text
text = soup.get_text()

print(text.encode('utf-8'))
于 2014-08-29T11:02:34.767 に答える
0

ページでユニコードを扱っている可能性がある場合は、 str(text) を実行できません。str() の代わりに、unicode() を使用します。

于 2012-06-24T18:28:41.897 に答える