1

我有这个具有编解码器的特定 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-8windows-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”

现在我可以使用上面提到的编解码器库来解决这个问题。我试图找出的是如何确定编码以便能够应用它。

这些是试图抓取和收集某些信息的两个站点:

http://www.orderapx.com/http://www.prpoakland.com/

4

1 回答 1

1

您正在从网络加载您的页面;查找带有charset参数的内容类型标头,以查看网络服务器是否已经告诉您有关编码的信息:

charset = page.headers.getparam('charset')
soup = BeautifulSoup(page.read(), from_encoding=charset)

如果不存在这样的参数,charset则设置为NoneBeautifulSoup 将回退到猜测。

你也可以尝试不同的解析器;如果 HTML 格式错误,不同的解析器会以不同的方式修复 HTML,也许可以让 BeautifulSoup 更好地检测编码。

于 2013-09-30T07:51:59.123 回答