Skip to main content
 首页 » 编程设计

Python输出编码

2025年05月04日22lovecherry

代码如下。 在 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)'] 
  1. 为什么变量打印输出与列表中的这个变量不同?
  2. 如何从网页获取正确的值

Технікум (училище)

在交互式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 
Технікум (училище)