Обычно кодирование определяется на основе HTTP-заголовков, возвращаемых сервером. Вместо того, чтобы определять это самостоятельно, используйте модуль requests
, который выполняет все это за вас, поэтому получить контент так же просто, как:
import requests
req = requests.get("your_url")
if req.status_code == 200:
print(req.text) # print out the decoded content or do whatever you want with it
Если кодировка отсутствует в самом заголовке, тогда она становится немного более сложной - вам придется трактовать ответ как кодированный ascii
HTML, попытаться найти тег <meta http-equiv="Content-Type" ... />
и извлечь из него content
кодировка. Как только вы его получите, вам придется снова декодировать контент с помощью соответствующей кодировки.
В ответе requests
недекодированный контент доступен в req.content
, поэтому для получения ascii
закодированного HTML используйте req.content.decode("ascii")
, затем анализируйте его HTML и ищите кодек (ищите SO, как разобрать HTML в Python), и, наконец, когда у вас есть кодек, просто повторно декодируйте содержимое с помощью этого кодека: req.content.decode(your_discovered_codec)
, чтобы получить правильно декодированный контент.