python - 如何使用Python对网页进行解码和编码?

标签 python web encoding

我使用Beautifulsoup和urllib2来下载网页,但是不同的网页有不同的编码方法,例如utf-8、gb2312、gbk。我使用urllib2获取sohu的主页,该主页是用gbk编码的,但是在我的代码中,我也使用这种方式对其网页进行解码:

self.html_doc = self.html_doc.decode('gb2312','ignore')

但是在使用 BeautifulSoup 将页面解码为 un​​icode 之前,我如何才能知道页面使用的编码方法呢?在大多数中文网站中,http Header 字段中没有 content-type。

最佳答案

使用 BeautifulSoup,您可以解析 HTML 并访问 original_encoding 属性:

import urllib2
from bs4 import BeautifulSoup

html = urllib2.urlopen('http://www.sohu.com').read()
soup = BeautifulSoup(html)

>>> soup.original_encoding
u'gbk'

这与 <meta> 中声明的编码一致HTML 中的 <head> 标记:

<meta http-equiv="content-type" content="text/html; charset=GBK" />

>>> soup.meta['content']
u'text/html; charset=GBK'

现在您可以解码 HTML:

decoded_html = html.decode(soup.original_encoding)

但是没有什么意义,因为 HTML 已经可以作为 unicode 使用:

>>> soup.a['title']
u'\u641c\u72d0-\u4e2d\u56fd\u6700\u5927\u7684\u95e8\u6237\u7f51\u7ad9'
>>> print soup.a['title']
搜狐-中国最大的门户网站
>>> soup.a.text
u'\u641c\u72d0'
>>> print soup.a.text
搜狐

也可以尝试使用 chardet 来检测它模块(虽然有点慢):

>>> import chardet
>>> chardet.detect(html)
{'confidence': 0.99, 'encoding': 'GB2312'}

关于python - 如何使用Python对网页进行解码和编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184863/

相关文章:

python - 是否可以使用 matplotlib 在单独的窗口中显示多个图?

java - HtmlUnit 中 getByXpath 的基本使用

python - 浏览器未使用 python 脚本通过 Jenkins 启动

python - 单击外部 url 链接时窗口不会打开新窗口或选项卡

python - 将非理想列表格式导出到 Excel

c# - 如何从 Web 服务环境返回 302 重定向

javascript - 如何从 nodejs 应用程序访问浏览器的窗口对象?

ruby - URI.unescape 在尝试将 "%C3%9Fą"转换为 "ßą"时崩溃

python - 防止 Python 中的编码错误

php - 尝试解码数据(将 Abs 导出到 MySQL)