我试图在FiveThirtyEight上抓住NBA比赛的预测。我通常使用urllib2和BeautifulSoup来从网上抓取数据。但是,从这个过程返回的html非常奇怪。它是一串字符,例如" \ x82 \ xdf \ x97S \ x99 \ xc7 \ x9d"。我无法将其编码为常规文本。这是我的代码:
from urllib2 import urlopen
html = urlopen('http://projects.fivethirtyeight.com/2016-nba-picks/').read()
此方法适用于538上的其他网站和其他网页,但不适用于此。
编辑:我尝试使用
解码字符串html.decode('utf-8')
并且方法位于here,但我收到以下错误消息:
UnicodeDecodeError:' utf8'编解码器不能解码位置1中的字节0x8b:无效的起始字节
答案 0 :(得分:0)
默认情况下,该页面似乎返回gzip压缩数据。以下应该可以解决问题:
from urllib2 import urlopen
import zlib
opener = urlopen('http://projects.fivethirtyeight.com/2016-nba-picks/')
if 'gzip' in opener.info().get('Content-Encoding', 'NOPE'):
html = zlib.decompress(opener.read(), 16 + zlib.MAX_WBITS)
else:
html = opener.read()
结果进入BeautifulSoup没有任何问题。
在尝试推断Python url库的问题原因时,HTTP标头(由上面的.info()返回)通常很有用。