使用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
相同的代码返回此
π佄呃偙⁅瑨汭倠䉕䥌⁃ჲ⼯㍗⽃䐯䑔䠠䵔⁌⸴吠慲狝莹潩虑⽬䔯≎∠瑨灴⼺眯睷眮⸳牯⽧剔砯瑨汭⼱呄⽄
答案 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