为什么urlopen给我一个奇怪的字符串?

时间:2016-04-14 02:19:24

标签: python urllib2

我试图在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:无效的起始字节

1 个答案:

答案 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()返回)通常很有用。