html中压缩过的数据处理

要是爬取的内容被压缩过就

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from StringIO import StringIO
import urllib2
import gzip

# 有些网站不管客户端支不支持gzip解压缩,都会返回经过gzip压缩后的数据,比如 www.qq.com

headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36"}
request = urllib2.Request("http://www.qq.com/", headers = headers)
response = urllib2.urlopen(request)
html = ""

# 判断:
# 如果响应信息里Content-Encoding 为gzip,表示响应内容通过gzip进行了压缩,则对数据进行解压缩处理
if response.info().get(‘Content-Encoding‘) == ‘gzip‘:
    # 通过StringIO 获取压缩字节流数据 存入内存
    data = StringIO(response.read())
    # 通过gzip.GzipFile 来解压数据,返回解压后的文件对象
    f = gzip.GzipFile(fileobj = data)
    # 保存解压后的字符串
    html = f.read()
# 否则直接读取响应数据
else:
    html = response.read()

# 将数据写入到磁盘文件
with open("qq.html", "w") as f:
    f.write(html)
时间: 2024-11-08 23:44:31

html中压缩过的数据处理的相关文章

linux中压缩与解压缩命令小结

linux中压缩与解压操作非常常见,其命令参数也非常的多,这里只介绍最经常用的带打包文件的几种压缩和解压方式和几个最常用的参数. 现在最常用的压缩和解压工具是gzip和bzip2,这两种工具不能相互解压对方压缩的文件.在linux中其实没有后缀名这一说法,但是为了方便用户解压文件时方便,所以在压缩的时候往往使用不同的后缀名以区分是使用的那个工具,一般使用gzip压缩的文件后缀名是.gz,用bzip2压缩的文件取名为.bz2,而打包文件一般使用tar工具,所以压缩后再打包的文件后缀名一般是.tar

在内存中压缩及解压缩

在内存中压缩及解压缩 //引入头文件#import <zlib.h> //引入libz动态库 NSString *str = @"zlib compress and uncompress test\[email protected]\n2012-11-05\n"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; Bytef *text = (Bytef*)[data bytes]; uLong tle

MVC4中压缩和合并js文件和样式文件

1.在App_Start文件夹中BundleConfig.cs类中添加相应的文件 1.1bundles.Add(new ScriptBundle("~/bundles/adminJs").Include("~/Scripts/jquery.js", "~/Scripts/jquery.form.js")); 1.2bundles.Add(new StyleBundle("~/Content/adminCss").Include

linux中压缩命令使用总结

最近学习使用linux,觉得压缩命令是经常要频繁使用的命令,所以花了点时间总结了以下,以备以后平常使用时,以供翻阅. [gzip]linux中使用最多的压缩命令之一.命令使用:gzip [-cdtv#] 文件名参数:    -c :将压缩的数据输出到屏幕,或通过数据流重定向来处理    -d :解压缩参数,删除原本的.gz文件    -t:用来检验一个压缩文件的一致性,看看文件有无错误    -v:可以显示出源文件/压缩文件的压缩比等信息    -#:压缩等级,#为1-9的数字,-9压缩比最高,

JAVA中压缩与解压缩

以压缩Zip文件为例.主要是通过ZipOutputStream类实现. import java.io.*; import java.util.*; import java.text.*; import java.util.zip.*; //压缩一个文件 //压缩一个文件夹 public class Hello { public static void main(String[] args)throws Exception { final int BUFFER_LENGTH = 1024*1024

微信开发中json与xml数据处理

写在前面的话:微信开发中,许多信息是通过json与xml格式来进行通信的,下面写一小总结. =====正文开始====== 一.json数据处理:json_decode 1.假设接收的json数据如下: $json='{"access_token":"o6_bmjrPTlm6_2sgVt7hMZOPfL2M","expires_in":7200}'; 2.通过json_decode($json),将字符串的json数据转化为PHP对象的形式: $

如何读取Hadoop中压缩的文件

最近在处理离线数据导入HBase的问题,涉及从Hdfs中读取gz压缩文件,把思路记录下来,以作备用.具体代码如下: package org.dba.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import org.apache.hadoop.conf.Configuration; impo

linux 中压缩记得压缩用c,解压用x

tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的参数是根据需要在压缩或解压档案时可选的. -z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名. # tar -cf all.tar *.jp

Hadoop MapReduce中压缩技术的使用

Compression and Input Splits 当我们使用压缩数据作为MapReduce的输入时,需要确认数据的压缩格式是否支持切片? 假设HDFS中有一个未经压缩的大小为1GB的文本文件,如果HDFS Block大小为128MB,那么这个文件会被HDFS存储为8个Block.当MapReduce Job使用这个文件作为输入时将会创建8个切片(默认每一个Block生成一个切片),每一个切片关联的数据都可以被一个Map Task独立地处理. 如果这个文本文件使用Gzip格式压缩,大小仍为