Python Curl с переменной кодировкой - PullRequest
0 голосов
/ 09 мая 2018

Я работаю над функцией Python 3, чтобы проверять различные веб-сайты, чтобы убедиться, что они в порядке (200 ответов, правильные метаданные, размер страницы и т. Д.). Эти сайты используют разные кодировки. Я использую Pycurl для декодирования тел страниц. В соответствии с pycurl quickstart кодирование страницы (то есть utf-8) должно быть передано перед декодированием.

Как получить текущую кодировку сайта перед передачей его для декодирования? Является ли pycurl лучшим выбором в Python 3 для сравнения содержимого страницы?

1 Ответ

0 голосов
/ 09 мая 2018

Обычно кодирование определяется на основе 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), чтобы получить правильно декодированный контент.

...