代码如下。 在 Debian 9 中使用 python 2 运行。
# -*- coding: utf-8 -*-
import requests
import bs4
# repairing invalid HTML
s = requests.get('http://vstup.info/2017/i2017i483.html')
tmp = s.text.replace("</td></tr></td></tr><tr><td>", "</td></tr><tr><td>")
bs = bs4.BeautifulSoup(tmp, "html.parser")
content = bs.find("div", {"id": "okrArea"}).find("table", {"id": "about"}).findAll("tr")
typ = content[1].findAll("td")[1].get_text() #ZVO type
print typ
print [typ]
它输出这个:
ТеÑ
нÑкÑм (ÑÑилиÑе)
[u'\xd0\xa2\xd0\xb5\xd1\x85\xd0\xbd\xd1\x96\xd0\xba\xd1\x83\xd0\xbc (\xd1\x83\xd1\x87\xd0\xb8\xd0\xbb\xd0\xb8\xd1\x89\xd0\xb5)']
- 为什么变量打印输出与列表中的这个变量不同?
- 如何从网页获取正确的值
Технікум (училище)
在交互式python中,它可以通过这种方式从反斜杠代码中获取
>>> print '\xd0\xa2\xd0\xb5\xd1\x85\xd0\xbd\xd1\x96\xd0\xba\xd1\x83\xd0\xbc (\xd1\x83\xd1\x87\xd0\xb8\xd0\xbb\xd0\xb8\xd1\x89\xd0\xb5)'.decode('utf8')
Технікум (училище)
请您参考如下方法:
您错误地信任服务器设置的 HTTP 内容字符集,使用 response.text .这为您提供了使用 header 信息从二进制响应数据解码的 Unicode 文本,这是错误的。然后,您将 Unicode 字符串提供给 BeautifulSoup,它假定它已被正确解码。
相反,使用 response.content属性,它为您提供原始二进制字符串内容正文:
tmp = s.conent.replace("</td></tr></td></tr><tr><td>", "</td></tr><tr><td>")
现在数据仍然是一个二进制字符串,BeautifulSoup 将根据 HTML 文档本身中的信息(有一个带有正确编解码器信息的 <meta> 标签)为您解码:
>>> import requests, bs4
>>> s = requests.get('http://vstup.info/2017/i2017i483.html')
>>> tmp = s.content.replace("</td></tr></td></tr><tr><td>", "</td></tr><tr><td>")
>>> bs = bs4.BeautifulSoup(tmp, "html.parser")
>>> content = bs.select("div#okrArea table#about tr")
>>> typ = content[1].findAll("td")[1].get_text()
>>> print typ
Технікум (училище)
