python不一致的行为,从EU网页读取内容[重复]

问题描述 投票:0回答:1

我正在尝试从以下欧盟页面中提取内容:

http://europa.eu/about-eu/countries/member-countries/greece/index_el.htm

并尝试使用urllib2打开页面并进行机械化,但是我得到了一些乱码,编码奇怪的文本。

url='http://europa.eu/about-eu/countries/member-countries/greece/index_el.htm'

browser = mechanize.Browser()
browser.set_handle_robots(False)
cookies = mechanize.CookieJar()
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US)     AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7')]

a=browser.open(url,timeout=5)
content=a.read()

给予

>>> content[:100]
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xbcW\xddo\x1b\xc7\x11\x7fv\xfe\x8a\xf5\x050\x12\xc0\xe4I\xfejkS\x0c\\\x89M\x8c\xfa\xab\xb2\x84\xa2\x08\x0cay\xb7<\xae\xb9\xb7{\xbe\xdb\xa3\xcc\x16\x05$\xcb\xae\xeb\xc0\x0eP\xa4F\x9f\x8a6\xe8\xabcWQTWV\\\xbd\xc4\xafG\xf9?\xea\xcc\xdd\xf1x\xa4HK:\xc9\\A\xe4r?'

但有时可以起作用:

>>> content[:100]
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd'

所以我该怎么做以避免遇到这个问题?

python html web-scraping mechanize
1个回答
2
投票

您正在接收压缩的内容;测试Content-Encoding标头并解压缩:

import zlib

if a.info().get('Content-Encoding', '').lower() == 'gzip':
    decompressor = zlib.decompressobj(16 + zlib.MAX_WBITS)
    content = decompressor.decompress(content)

或者,使用出色的python-requests library,它将为您处理会话,但也将透明地解压缩gzip并为您压缩响应。

© www.soinside.com 2019 - 2024. All rights reserved.