1. 引言

在爬取汽车销量数据时需要爬取 html 保存在本地后再做分析,由于一些页面的 gzip 编码格式,

获取后要先解压缩,否则看到的是一片乱码。在网络上仔细搜索了下,终于在这里找到了一个优雅的方案。

2. 使用的开源库

        <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>

3. 实现代码

package com.reycg;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.zip.GZIPInputStream; import org.apache.commons.io.FileUtils; import com.google.common.base.Charsets;
import com.google.common.io.ByteSource;
import com.google.common.io.Resources; public class GzippedByteSource extends ByteSource { private final ByteSource source; public GzippedByteSource(ByteSource gzippedSource) {
source = gzippedSource;
} @Override
public InputStream openStream() throws IOException {
return new GZIPInputStream(source.openStream());
} public static void main(String[] args) throws IOException {
URL url = new URL("..."); // TODO 此处需要输入 html 页面地址
String filePath = "1.html"; List<String> lines = new GzippedByteSource(Resources.asByteSource(url)).asCharSource(Charsets.UTF_8).readLines();
     // List<String> lines = Resources.asCharSource(url, Charsets.UTF_8).readLines(); // 非 gzip 格式 html 页面获取 (1) FileUtils.writeLines(new File(filePath), lines);
} }

4. 注意

1. 如果在执行时报下面错误,说明返回 html 页面并非 gzip 格式

Exception in thread "main" java.util.zip.ZipException: Not in GZIP format

此时可以使用上面代码标号为 (1) 的代码行获取。

5. 附注

获取汽车销量主要用来在 我个人开发的 汽车销量查询小助手(小程序)展示所用,如果有同学感兴趣,可以在

微信小程序中搜索 汽车销量查询小助手 或者扫描下方二维码查看效果,欢迎同学提建议和评论。

最新文章

  1. 配置WinRM的Https
  2. go的mgo,连接未释放问题,连接泄露。
  3. Android学习笔记——Button
  4. Adobe AIR socket complicating 导致 socket RST
  5. Jqgrid获取行id
  6. Unity连接本地数据库sqlite
  7. C语言初学 计算表达式的值 switch的意义
  8. 黄油刀ButterKnife的使用
  9. Java Calendar类使用总结
  10. 在PHP中如何把数组写成配置文件
  11. 老男孩Python全栈学习 S9 日常作业 009
  12. C++设计模式——桥接模式
  13. page.isvalid
  14. (转载)Unity 关于动态监听时,点击Button,返回其在数组中的下标
  15. hadoop fs 获取文件大小
  16. 利用Python的collections包下Counter的类统计每个数据出现的个数
  17. Django中的路由系统:urls
  18. Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final
  19. SQL语句查询关键字中含有特殊符号怎么处理, 例如 &#39;SMI_&#39;
  20. linux 挂载硬件设备

热门文章

  1. MySQL(安装,服务,创建用户及授权)
  2. FunDA(9)- Stream Source:reactive data streams
  3. python爬虫2——下载文件(中华网图片库下载)
  4. Android之自定义控件
  5. 一对一关联查询注解@OneToOne的实例详解
  6. IIS Express 配置 Json
  7. Mac下的paths.d目录神奇用法
  8. org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=Administrator, access=WRITE, inode=&quot;hadoop&quot;: hadoop:supergroup:rwxr-xr-x
  9. jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
  10. XMind *思维导图的安装步骤(图文详解)