如何优雅的爬取 gzip 格式的页面并保存在本地(java实现)
2024-09-01 15:40:50
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. 附注
获取汽车销量主要用来在 我个人开发的 汽车销量查询小助手(小程序)展示所用,如果有同学感兴趣,可以在
微信小程序中搜索 汽车销量查询小助手 或者扫描下方二维码查看效果,欢迎同学提建议和评论。
最新文章
- 配置WinRM的Https
- go的mgo,连接未释放问题,连接泄露。
- Android学习笔记——Button
- Adobe AIR socket complicating 导致 socket RST
- Jqgrid获取行id
- Unity连接本地数据库sqlite
- C语言初学 计算表达式的值 switch的意义
- 黄油刀ButterKnife的使用
- Java Calendar类使用总结
- 在PHP中如何把数组写成配置文件
- 老男孩Python全栈学习 S9 日常作业 009
- C++设计模式——桥接模式
- page.isvalid
- (转载)Unity 关于动态监听时,点击Button,返回其在数组中的下标
- hadoop fs 获取文件大小
- 利用Python的collections包下Counter的类统计每个数据出现的个数
- Django中的路由系统:urls
- Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final
- SQL语句查询关键字中含有特殊符号怎么处理, 例如 &#39;SMI_&#39;
- linux 挂载硬件设备
热门文章
- MySQL(安装,服务,创建用户及授权)
- FunDA(9)- Stream Source:reactive data streams
- python爬虫2——下载文件(中华网图片库下载)
- Android之自定义控件
- 一对一关联查询注解@OneToOne的实例详解
- IIS Express 配置 Json
- Mac下的paths.d目录神奇用法
- org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=Administrator, access=WRITE, inode=";hadoop";: hadoop:supergroup:rwxr-xr-x
- jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
- XMind *思维导图的安装步骤(图文详解)