Разбор различных файлов Юникода с помощью BeautifulSoup
У меня есть эта конкретная 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'
Теперь я могу это исправить, используя библиотеку кодеков, как указано выше. Я пытаюсь выяснить, как определить кодировку, чтобы можно было ее применить.
Это два сайта, которые пытаются сканировать и собирать определенную информацию:
1 ответ
Вы загружаете свои страницы из Интернета; искать заголовок типа контента с charset
параметр, чтобы увидеть, если веб-сервер уже сказал вам о кодировке:
charset = page.headers.getparam('charset')
soup = BeautifulSoup(page.read(), from_encoding=charset)
Если такого параметра нет, charset
установлен в None
и BeautifulSoup вернется к угадыванию.
Вы также можете попробовать разные парсеры; если HTML-код искажен, различные парсеры будут восстанавливать HTML-код разными способами, возможно, позволяя BeautifulSoup лучше определять кодировку.