检测并更改python中的网站编码

时间:2011-03-31 08:26:35

标签: python encoding beautifulsoup scrape

我的网站编码有问题。我制作了一个程序来抓取一个网站,但我没有成功改变readed内容的编码。我的代码是:

import sys,os,glob,re,datetime,optparse
import urllib2

from BSXPath import BSXPathEvaluator,XPathResult
#import BeautifulSoup

#from utility import *

sTargetEncoding = "utf-8"

page_to_process = "http://www.xxxx.com" 
req = urllib2.urlopen(page_to_process)
content = req.read()
encoding=req.headers['content-type'].split('charset=')[-1]
print encoding

ucontent = unicode(content, encoding).encode(sTargetEncoding)
#ucontent = content.decode(encoding).encode(sTargetEncoding)
#ucontent = content

document = BSXPathEvaluator(ucontent)

print "ORIGINAL ENCODING: " + document.originalEncoding

我使用外部库(BSXPath是BeautifulSoap的扩展),document.originalEncoding打印网站的编码,而不是我试图改变的utf-8编码。 有人有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

嗯,无法保证HTTP标头提供的编码与HTML本身内部指定的编码相同。这可能是由于服务器端的配置错误或HTML内部的charset定义可能是错误的。实际上没有自动方法来检测编码或检测正确的编码。我建议手动检查HTML以获得正确的编码(例如,可以轻松检测到iso-8859-1与utf-8),然后在应用程序内以某种方式手动对编码进行硬编码。