【发布时间】:2013-10-05 23:11:01
【问题描述】:
我有这个具有编解码器的特定 HTML 页面
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
现在,当我尝试使用 BeautifulSoup 解析这个特定文件时,它总是返回 NULL 对象。 我可以使用它来转换它:
page = codecs.open('file_name', 'r', 'cp1251')
soup = BeautifulSoup(page.read())
现在它工作正常。但在我的收藏中,我的页面包含 UTF-8 和 windows-1251 字符集类型。所以,我想知道确定特定 HTML 页面的字符集的过程是什么,如果它是 windows-1251 格式,则进行相应的转换?
我发现了这个:
soup.originalEncoding
但为此我需要将其加载到“汤”中。但只有它返回“无类型对象”。任何帮助将不胜感激。
我正在使用 Python 2.7
编辑:
这是我真正想说的一个例子:
这是我的代码:
from bs4 import BeautifulSoup
import urllib2
page=urllib2.urlopen(Page_link)
soup = BeautifulSoup(page.read())
print soup.html.head.title
页面有
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
正确显示页面标题。
现在如果页面有
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
那么输出是
AttributeError: 'NoneType' 对象没有属性 'head'
现在我可以使用上面提到的编解码器库来解决这个问题。我想知道的是如何确定编码以便能够应用它。
这是两个试图抓取和收集某些信息的网站:
【问题讨论】:
-
您将页面解码为 Unicode,而不是 UTF8。 UTF8 是另一种编码,就像 Windows-1251 一样。你能给我们展示示例源代码吗?源码中真的是
"charset=charset=..."吗? -
对不起,我的错。我复制错了。我编辑了这一行。感谢您指出。
-
另外,这是 BeautifulSoup 3 还是 4? 通常,我希望 BeautifulSoup 找到
<meta />标签并为您检测编码。 -
美汤 4.3.1 !
-
我会寻找
Content-Type标头,如果存在并包含charset=..参数,请使用该参数告诉 BeautifulSoup 使用什么编解码器。见crummy.com/software/BeautifulSoup/bs4/doc/#encodings。
标签: python python-2.7 html-parsing beautifulsoup cp1251