首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么urlopen会给我一个奇怪的字符串?

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

Stack Overflow用户
提问于 2016-04-14 10:19:24
回答 1查看 188关注 0票数 0

我正试着从FiveThirtyEight上获取NBA的比赛预测。我通常使用urllib2和BeautifulSoup从网络上抓取数据。然而,从这个过程中返回的html非常奇怪。它是一个字符串,例如"\x82\xdf\x97S\x99\xc7\x9d“。我无法将其编码为常规文本。下面是我的代码:

代码语言:javascript
运行
复制
from urllib2 import urlopen
html = urlopen('http://projects.fivethirtyeight.com/2016-nba-picks/').read()

这种方法适用于538上的其他网站和其他页面,但不适用于这个网站。

编辑:我尝试使用以下命令来解码字符串

代码语言:javascript
运行
复制
html.decode('utf-8')

方法定位到了here,但我得到了以下错误消息:

UnicodeDecodeError:'utf8‘编解码器无法对位置1中的字节0x8b进行解码:起始字节无效

EN

回答 1

Stack Overflow用户

发布于 2016-04-14 11:06:45

默认情况下,该页面似乎返回gzipped数据。下面的代码应该可以解决这个问题:

代码语言:javascript
运行
复制
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()返回)通常很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36612721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档