各位好,
我是使用 python 从网络获取数据的新手。我想在字符串中包含此页面的源代码:https : //projects.fivethirtyeight.com/2018-nba-predictions/
以下代码适用于其他页面(例如https://www.basketball-reference.com/boxscores/201712090ATL.html):
import urllib.request
file = urllib.request.urlopen(webAddress)
data = file.read()
file.close()
dataString = data.decode(encoding='UTF-8')
Run Code Online (Sandbox Code Playgroud)
我希望 dataString 是一串 HTML(在这种特定情况下,我的期望见下文)
<!DOCTYPE html><html lang="en"><head><meta property="article:modified_time" etc etc
Run Code Online (Sandbox Code Playgroud)
相反,对于 538 网站,我收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
Run Code Online (Sandbox Code Playgroud)
我的研究表明问题在于我的文件实际上并未使用 UTF-8 编码,但是页面的字符集和 beautiful-soup 的 UnicodeDammit() 都声称它是 UTF-8(第二个可能是因为第一个)。chardet.detect() 不建议任何编码。我尝试在 decode() 的编码参数中用以下内容替换 'UTF-8' 无济于事:
ISO-8859-1
拉丁语 1
视窗-1252
也许值得一提的是字节数组数据看起来不像我期望的那样。这是来自工作 URL 的 data[:10]:
b'\n<!DOCTYPE'
Run Code Online (Sandbox Code Playgroud)
这是来自 538 站点的数据 [:10]:
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?