将由urllib2获取的gzip压缩数据转换为HTML

8 浏览
0 Comments

将由urllib2获取的gzip压缩数据转换为HTML

我目前使用mechanize来读取gzipped网页,如下所示:

br = mechanize.Browser()
br.set_handle_gzip(True)
response = br.open(url)
data = response.read()

我想知道如何使用urllib2获取的gzipped数据解压缩为HTML文本?

req = urllib2.Request(url)
opener = urllib2.build_opener()
response = opener.open(req)
data = response.read()
if response.info()['content-encoding'] == 'gzip':
    如何将数据解压缩为HTML

0
0 Comments

从上述代码中可以看出,这段代码的功能是将使用urllib2库获取的经过gzip压缩的数据转换为HTML格式的数据。下面分别解释这段代码的出现原因和解决方法。

1. 出现原因:

在使用urllib2库获取网络数据时,有些服务器会对返回的数据进行gzip压缩,以减少数据传输的大小。而urllib2库默认情况下并不会自动将gzip压缩的数据解压缩成可读的HTML格式数据,导致在获取到的数据中包含了压缩后的内容,无法直接进行处理和解析。

2. 解决方法:

上述代码中的ungzip函数可以将gzip压缩的数据解压缩为HTML格式的数据,并将解压缩后的数据重新赋值给原始的请求对象,以便后续的处理。

具体的解决方法如下:

- 首先,通过判断响应头中的Content-Encoding或content-encoding字段是否为gzip,来确定服务器是否对数据进行了gzip压缩。

- 如果是gzip压缩的数据,则导入gzip模块,并使用GzipFile类对压缩数据进行解压缩。

- 解压缩后的数据为二进制格式,需要将其转换为可读的文本格式,这里将其转换为utf-8编码的HTML文本。

- 关闭gzip解压缩的文件对象。

- 将Content-type字段设置为text/html; charset=utf-8,以确保后续处理时正确解析数据。

- 将解压缩后的HTML数据重新设置给原始的请求对象,即将解压缩后的数据替换掉原始的gzip压缩数据。

- 最后,将更新后的请求对象赋值给原始的浏览器对象,以便后续的处理和显示。

通过以上的整理,我们可以清楚地了解到在使用urllib2库获取gzip压缩的数据时,需要进行相应的解压缩操作,以获得可读的HTML数据。而上述代码提供了一个可行的解决方法,通过对gzip压缩数据进行解压缩和转换,实现了从gzip压缩数据到HTML数据的转换过程。

0
0 Comments

问题出现的原因是:通过urllib2获取的数据是经过gzip压缩的,因此需要将其转换为HTML格式。

解决方法是:

1. 导入StringIO模块,并将获取的数据存储在StringIO对象中。

2. 导入gzip模块,并使用GzipFile将StringIO对象作为参数进行初始化。

3. 使用GzipFile的read方法读取压缩后的数据,并将其赋值给变量html。

4. 打印html变量以查看转换后的HTML内容。

5. 可以使用gzip.decompress(data)方法直接解压缩数据。

6. 由于上述方法在某些情况下不起作用,可以使用zlib模块代替gzip模块进行解压缩。

需要注意的是,上述文章提到的问题是关于流式gzip解压缩的,与该问题的主题不同。因为该问题明确指出数据已经被获取,而在流式情况下,需要在接收数据时进行解压缩。

0