Traceback (most recent call last):
File "C:\Program Files (x86)\Python\Projects\test.py", line 70, in <module>
html = urlopen("https://www.google.co.jp/").read().decode('utf-8')
File "C:\Program Files (x86)\Python\lib\http\client.py", line 506, in read
return self._readall_chunked()
File "C:\Program Files (x86)\Python\lib\http\client.py", line 592, in _readall_chunked
value.append(self._safe_read(chunk_left))
File "C:\Program Files (x86)\Python\lib\http\client.py", line 664, in _safe_read
raise IncompleteRead(b''.join(s), amt)
http.client.IncompleteRead: IncompleteRead(5034 bytes read, 3158 more expected)
所以我试图从网站上获取数据,但似乎只要遇到日文字符或其他不可读的字符就会出现此错误。我正在使用的是urlopen和.read()。decode('utf-8')。有什么方法可以忽略所有这些或者全部替换它们以便没有错误吗?
答案 0 :(得分:0)
在您发布的代码中,字符编码没有问题。相反,您在获取整个HTTP响应时遇到问题。 (仔细查看错误消息。)
我在交互式Python shell中试过这个:
>>> import urllib2
>>> url = urllib2.urlopen("https://www.google.co.jp/")
>>> body = url.read()
>>> len(body)
11155
这很有用。
>>> body.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x90 in position 102: invalid start byte
好的,确实存在编码错误。
>>> url.headers['Content-Type']
'text/html; charset=Shift_JIS'
这是因为您的HTTP响应不是以UTF-8编码,而是以Shift-JIS编码。
您可能不应该使用urllib2
,而是使用更高级别的库来处理HTTP编码。或者,如果您想自己动手,请参阅https://stackoverflow.com/a/20714761。
答案 1 :(得分:0)
import requests
r = requests.get("https://www.google.co.jp/")
soup = BeautifulSoup(r.content)
print soup.find_all("p")
[<p style="color:#767676;font-size:8pt">© 2013 - <a href="/intl/ja/policies/">プライバシーと利用規約</a></p>]