Beautiul汤回归奇怪的人物(chinesse)

时间:2016-07-12 17:25:09

标签: python beautifulsoup

使用Python3和BeautifulSoup v4

url='http://www.eurobasket2015.org/en/compID_qMRZdYCZI6EoANOrUf9le2.season_2015.roundID_9322.gameID_9323-C-1-1.html'
r=requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")

返回您期望的内容

然而

这个网址,类似的页面,但不同的游戏     http://www.eurobasket2015.org/en/compID_qMRZdYCZI6EoANOrUf9le2.season_2015.roundID_9322.gameID_9323-D-3-1.html

相同的代码返回此

π佄呃偙⁅瑨汭倠䉕䥌⁃ჲ⼯㍗⽃䐯䑔䠠䵔⁌⸴㄰吠慲狝莹潩虑⽬䔯≎∠瑨灴⼺眯睷眮⸳牯⽧剔砯瑨汭⼱呄⽄

1 个答案:

答案 0 :(得分:2)

我可以使用.content进行复制,为什么会发生这种情况是因为以下元标记,charset设置为UTF-16

<META http-equiv="Content-Type" content="text/html; charset=UTF-16">

解决方法是将 from_encoding 指定为 utf-8:

soup = BeautifulSoup(r.content,"lxml", from_encoding="utf-8")

您还可以解码字节:

soup = BeautifulSoup(r.content.decode("utf-8"))

如果您打印标题,可以看到'Content-Type': 'text/html; Charset=UTF-8',数据实际上是utf-8编码但元标记不正确。

如果我们获取内容,请自行解码并打印切片,您可以看到它实际上已被bs4解码为 utf-16

In [1]: import requests

In [2]: r = requests.get("http://www.eurobasket2015.org/en/compID_qMRZdYCZI6EoANOrUf9le2.season_2015.roundID_9322.gameID_9323-D-3-1.html")

In [3]: print(r.content.decode("utf-16")[:10])
ℼ佄呃偙⁅瑨汭倠䉕䥌

In [4]: print(r.content.decode("utf-8")[:10])
<!DOCTYPE