Почему я получил грязные символы при открытии URL с помощью urllib2? - PullRequest
1 голос
/ 29 августа 2011

Вот мой код, вы, ребята, тоже можете его проверить. Я всегда получаю испорченные символы вместо источника страницы.

Header = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)"}

Req = urllib2.Request("http://rlslog.net", None, Header)

Response = urllib2.urlopen(Req)

Html = Response.read()

print Html[:1000]

Обычно Html должен быть источником страницы, но в итоге это были тонны запутанных символов. Кто-нибудь знает почему?

Кстати: я на питоне 2.7

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Как уже предположил Брюс, похоже, проблема со сжатием. Сервер возвращает сжатый gzip контент, но urllib2 не поддерживает автоматическое сжатие gzip. На самом деле, сервер в этом случае ведет себя не так, насколько я знаю: он должен сжимать содержимое только при наличии заголовка Accept-encoding: gzip (который вы либо предоставляете сами, либо автоматически добавляется вашим клиентом, если он его поддерживает).

Итак: либо используйте библиотеку, которая поддерживает ее автоматически, например httplib2 (которую я тестировал на рассматриваемой странице, и она работает), либо распакуйте себя (см. Ответ на в этом вопросе о том, как это сделать, обратите внимание, что в вопросе заголовки, возвращаемые сервером, проверяются, чтобы проверить, является ли содержимое сжатым gzip)

0 голосов
/ 29 августа 2011

Вы делаете запрос с помощью пользовательского агента, который поддерживает сжатие на лету.Вы уверены, что вывод не сжат GZIP?Попробуйте запустить его через модуль zlib и / или печатные заголовки

...