WARC是一种格式。Heritrix(
http://crawler.archive.org/)用它原封不动地储存HTTP请求和HTTP响应的全文。包括请求/状态行、头、内容。
读WARC格式很简单。利用Heritrix中提供的工具即可。
package warc;
import java.io.*;
import org.apache.commons.io.IOUtils;
import org.archive.io.*;
import org.archive.io.warc.*;
public class MyWarcReading {
public static void main(String[] args) throws Exception {
ArchiveReader ar = WARCReaderFactory.get("/path/to/your/file.warc.gz");
// ArchiveReader对象本身实现了Iterator<ArchiveRecord>接口,可以用for循环。
for (ArchiveRecord rec : ar) {
// 获取WARC记录头。
ArchiveRecordHeader header = rec.getHeader();
// 可以对header做一些操作。
// 读出这条记录的内容。ArchiveRecord继承了InputStream类。
// 我使用了Commons-IO。不过这样读太暴力了……
byte[] content = IOUtils.toByteArray(rec);
// 对内容做什么都行。
}
ar.close();
}
}
如果里面储存了爬虫爬的结果,那么整个HTTP响应会成为一条记录的内容。这种记录是原封不动的响应,包括status line, headers, entity,都有。mimetype是application/http,如HTTP/1.1的RFC中所述。
ArchiveRecord rec; // 一条记录
if(rec.getHeader().getMimetype().equals(
"application/http; msgtype=response")) {
// 这是HTTP响应
}
如何解析这个响应呢?
想过用Apache Httpcomponents(
http://hc.apache.org/)的HTTP Core,但是它的解析器与Socket耦合太强,还使用了很多自己的数据结构以提高效率。Jetty的解析器没有文档(undocumented)。
最后,发现如果只是想读HTTP头,还是用BufferedReader自己读比较好。
private static void parseHtml(ArchiveRecord rec) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(rec,"ISO-8859-1"));
String statusLine = br.readLine();
System.out.println("Status:"+statusLine);
System.out.println("===HTTP headers===");
while(true) {
String line = br.readLine();
if(line==null || line.isEmpty()) {
break;
}
System.out.println(line);
}
byte[] bytes = IOUtils.toByteArray(rec); // WRONG!
System.out.println("===HTTP entity===");
System.out.println(new String(bytes, "UTF-8"));
}
但是,由于BufferedReader的缓冲,此时读出的entity是不正确的。
分享到:
相关推荐
python库。 资源全名:scrapy-warc-0.5.4.tar.gz
它们包括发送到服务器的 HTTP 请求和收到的 HTTP 响应(包括标头)。 WARC 是一个,被和使用(除其他外)。 这个 warc-hadoop 库是为了探索数据而编写的,这是一个公开可用的数十亿网页转储。 这些数据作为 AWS 上...
WARC-在COVID-19衰退中的营销指南(英文)-2020.5-29页.pdf
WARC-全球广告趋势—2020-2021年行业状况(英文)-2020.12-31页精品报告2020.pdf
zoomfft_attempt9rt_zoomfft_warc6x_源码.rar
节点-warc-代理 允许导航 WARC 文件内容的简单 node.js 服务器 要求 : npm install csv csv-stream 流转换 stdio 插件: npm install stdio :pip install warctools 测试中使用的示例 warc: 跑步 将 drupalib....
节点warc 解析 Web 存档 (WARC) 文件或使用创建 WARC 文件运行npm install node-warc或yarn add node-warc到 ge 开始文档完整文档可在解析使用异步迭代需要节点 10 或更高 const fs = require ( 'fs' )const zlib = ...
[WARC文件]使用原始HTTP响应HTML标记频率计数器 [WAT文件]使用响应元数据的服务器响应分析 [WET文件]使用提取的文本的经典单词计数示例 所有这三个文件最初都假设文件存储在本地,但可以对其进行简单地修改以将它们...
WARC 包支持记录时间压缩。 由于使用了 compress/gzip.Reader#Multistream,因此需要 go1.4 目前仅适用于记录时间压缩的 .gz 文件。 支持并发读取的索引操作。 一种用例是让一个 goroutine 将 Offset 传递给多个 ...
历史学家-WARC-1 注意:这是非常初步的,现在折旧的工作。 我主要使用 Solr 和 Warcbase 作为我的主要 Web 存档访问方法。 这种方法适用于较小的集合,但在超过 100 GB 左右时会遇到严重问题(除非您有极大的耐心。...
warc-c WIP C库,用于解析文件。
将WARC数据记录到IPFS的非常实验性的演示 需要redis(暂时)和IPFS(当然)。 使用新的(实验性)实时录制系统编写WARC 安装 pip install -r requirements.txt 启动森林小组守护程序(如果尚未运行) ipfs daemon...
gem 'warc' 然后执行: $ bundle 或将其自己安装为: $ gem install warc 用法 待办事项:在此处写下使用说明 贡献 叉它 创建功能分支( git checkout -b my-new-feature ) 提交更改( git commit -am 'Added ...
warcio, 流 warc/arc 库,用于快速网络存档 WARCIO: WARC ( 还有 arc ) 流库 背景这个库提供了一种快速。独立的方式来读取和写入 WARC格式( 通常用于web归档中) 。 支持 python 2.7 和 python 3.3 ( 使用六,这是
2020年营销工具报告(英文)-WARC-201912
2020年营销工具报告(英文)-WARC-201912
营销达人攻关册2021-WARC-2021-133页.pdf
zoomfft_attempt9rt_zoomfft_warc6x_源码.zip
Warc-全球广告趋势调查报告(英文)--13页.pdf