0

Pythongoogleapiをコーディングしようとしています。いくつかのUnicodeの問題を取得します。これまでの私の本当に基本的なPoCは次のとおりです。

#!/usr/bin/env python
import urllib2
from bs4 import BeautifulSoup        
query = "filetype%3Apdf"
url = "http://www.google.com/search?sclient=psy-ab&hl=en&site=&source=hp&q="+query+"&btnG=Search"
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
response = opener.open(url)
data = response.read()
data = data.decode('UTF-8', 'ignore')
data = data.encode('UTF-8', 'ignore')
soup = BeautifulSoup(data)
print u""+soup.prettify('UTF-8')

私のトレースバックは次のとおりです。

Traceback (most recent call last):
  File "./google.py", line 22, in <module>
print u""+soup.prettify('UTF-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 48786: ordinal not in range(128)

何か案は?

4

1 に答える 1

4

soupツリーを(エンコードされたバイト文字列)に変換してUTF-8から、これを空のu'' Unicode文字列に連結しようとします。

Pythonは、デフォルトのエンコーディングであるを使用して、エンコードされたバイト文字列を自動的にデコードASCIIしようとしますが、データのデコードに失敗しUTF-8ます。

prettify()出力を明示的にデコードする必要があります。

print u"" + soup.prettify('UTF-8').decode('UTF-8')

Python Unicode HOWTOは、デフォルトのエンコーディングについても含めて、これをよりよく説明しています。ジョエル・スポルスキーのUnicodeに関する記事も読むことをお勧めします。

于 2012-09-15T13:01:01.543 に答える