Я пытаюсь получить кодировку символов для страниц, которые я очищаю, но в некоторых случаях это не удается. Вот что я делаю:
resp = urllib2.urlopen(request)
self.COOKIE_JAR.extract_cookies(resp, request)
content = resp.read()
encodeType= resp.headers.getparam('charset')
resp.close()
Это моя первая попытка. Но если кодировка возвращается как 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 (вот почему 2-й оператор сейчас вложен):
Объект 'NoneType' не имеет атрибута 'lower'
Что не так с оператором второй попытки? Я предполагаю, что 1-й также неверен, поскольку он выдает ошибку, а не просто возвращается пустым.
ИЛИ еще лучше Есть ли более элегантный способ просто удалить любую специальную кодировку со страницы? Мой конечный результат, которого я пытаюсь достичь, заключается в том, что меня не волнует ни один из специально закодированных символов. Я хочу удалить закодированные символы и сохранить необработанный текст. Могу ли я пропустить все вышеперечисленное и сказать BeautifulSoup, чтобы просто удалить все, что закодировано?