【发布时间】:2011-03-23 20:33:43
【问题描述】:
我正在尝试获取我抓取的页面的字符编码,但在某些情况下它会失败。这是我正在做的事情:
resp = urllib2.urlopen(request)
self.COOKIE_JAR.extract_cookies(resp, request)
content = resp.read()
encodeType= resp.headers.getparam('charset')
resp.close()
这是我的第一次尝试。但如果 charset 以 None 类型返回,我会这样做:
soup = BeautifulSoup(html)
if encodeType == None:
try:
encodeType = soup.findAll('meta', {'http-equiv':lambda v:v.lower()=='content-type'})
except AttributeError, e:
print e
try:
encodeType = soup.findAll('meta', {'charset':lambda v:v.lower() != None})
except AttributeError, e:
print e
if encodeType == '':
encodeType = 'iso-8859-1'
我正在测试的页面在标题中有这个:
<meta charset="ISO-8859-1">
我希望第一个 try 语句返回一个空字符串,但是我在两个 try 语句上都得到了这个错误(这就是为什么现在第二个语句是嵌套的):
'NoneType' 对象没有属性 'lower'
第二个 try 语句有什么问题?我猜第一个也是不正确的,因为它抛出了一个错误,而不仅仅是返回空白。
或者更好有没有更优雅的方法来从页面中删除任何特殊字符编码?我试图完成的最终结果是我不关心任何特殊编码的字符。我想删除编码字符并保留原始文本。我可以跳过以上所有内容并告诉 BeautifulSoup 只删除任何已编码的内容吗?
【问题讨论】:
标签: python lambda beautifulsoup