`
cloverprince
  • 浏览: 129797 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WARC里的HTTP响应

    博客分类:
  • Java
阅读更多
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

    此外,Scrapy-WARC库还支持设置WARC记录的其他参数,如WARC版本、WARC类型、HTTP响应码等。通过自定义Scrapy中间件,可以进一步定制WARC记录的行为,比如在特定条件下才写入WARC文件,或者添加自定义元数据。 在...

    warc-hadoop:Hadoop 的 WARC(Web 档案)输入和输出格式

    它们包括发送到服务器的 HTTP 请求和收到的 HTTP 响应(包括标头)。 WARC 是一个,被和使用(除其他外)。 这个 warc-hadoop 库是为了探索数据而编写的,这是一个公开可用的数十亿网页转储。 这些数据作为 AWS 上...

    Python库 | har2warc-1.0.2-py2.py3-none-any.whl

    Python库har2warc-1.0.2-py2.py3-none-any.whl是一个用于处理HTTP Archive (HAR) 文件并将其转换为WARC(Web ARChive)格式的工具。这个库对于网络数据抓取、分析和存档特别有用,因为它允许用户将浏览器记录的HTTP...

    warc-c:C语言中的WIP WARC解析器

    2. **HTTP响应**:如果记录源自HTTP请求,它会包含完整的HTTP响应,包括状态码、头信息和响应体。 3. **资源**:可以是网页的HTML内容、图片、JavaScript文件等。 4. **WARC信息头**:每个WARC文件开头有一个WARC...

    cc-warc-examples:用于Java + HadoopCommonCrawl WARCWETWAT示例和处理代码

    [WARC文件]使用原始HTTP响应HTML标记频率计数器 [WAT文件]使用响应元数据的服务器响应分析 [WET文件]使用提取的文本的经典单词计数示例 所有这三个文件最初都假设文件存储在本地,但可以对其进行简单地修改以将它们...

    go-warc-indexer:将WARC文件转换为CDXJ格式并将其内容存储在IPFS上的索引器

    WARC文件是包含网络抓取数据的容器,每条记录都包含了HTTP请求与响应的完整信息,包括URL、时间戳、内容类型等。这种格式确保了历史网页的可追溯性和一致性,广泛应用于学术研究、数字图书馆和网络监测等领域。 2....

    ipwb:行星际回溯:使用IPFS的分布式持久存档重播系统

    ipwb / indexer.py-归档索引脚本,用于获取WARC输入的路径,从指定的WARC提取HTTP标头,HTTP有效负载(响应主体)和WARC响应记录标头的相关部分,并创建字节字符串表示形式。 然后,索引器使用本地运行的IPFS守护...

    wget-lua:Wget-AT是具有Lua挂钩,Zstandard(+ dictionary)WARC压缩和与URL无关的重复数据删除功能的现代Wget

    WARC文件包含了完整的HTTP交易记录,包括请求、响应、元数据等,方便后续分析和长期保存。 **与URL无关的重复数据删除** `wget-lua` 提供了一个与URL无关的重复数据删除功能,这意味着它能够在抓取过程中识别并...

    Python库 | ipwb-0.2017.7.16.1754.tar.gz

    2. **网络流量捕获**:ipwb可以集成到用户的浏览器或HTTP代理服务器中,实时捕获并记录网络请求和响应。这对于开发者调试、研究人员分析历史数据,或是普通用户备份个人浏览历史都非常有用。 3. **本地回放**:除了...

    nutch-analysis.rar_nutch

    WARC文件包含了网页的HTTP响应,包括状态码、头部信息和正文内容。 4. **Text and Metadata**: Nutch会从HTML中提取文本内容并保存在`_content`文件中。同时,它还提取元数据(如标题、描述等),存储在`_parse_...

    Heritrix1.14.4(含源码包)

    WARC文件包含原始的HTTP响应,包括头部信息和内容,可以使用专门的工具进行解析和检索。 8. **法律与伦理**:使用Heritrix时,必须遵守网络抓取的法律和伦理规定,尊重网站的robots.txt文件,避免对目标服务器造成...

    网络爬虫.txt

    - **WARC格式介绍**:WARC (Web ARChive) 是一种用于存档网络资源的标准格式,包含元数据、HTTP响应头等信息。 - **数据分析**:通过分析WARC文件中的数据,可以深入了解网站的结构特征,如页面之间的链接关系、内容...

    commoncrawl_downloader

    commoncrawl_downloader 用法示例: docker build -t ccdl . docker run -e NUM_CORES=8 -v $PWD/... 文件中的每个json对象都有一个text字段(包含网页)和一个meta字段,其中包含有关语言,WARC标头和HTTP响应标头

    heritrix的绿色配置包

    1. **启动与配置**:在开始抓取前,用户需要配置Heritrix的工作模式,包括设定种子URL(即抓取的起始点),定义爬行策略,以及选择处理不同类型的HTTP响应的处理器。 2. **爬行策略**:Heritrix支持多种爬行策略,...

    Web Archive Access Utilities-开源

    而WARC文件则是一种更为标准化和广泛接受的格式,它不仅包含了ARC的所有功能,还增加了对多种类型数据的支持,如HTTP响应、DNS查询等,旨在更好地保留网络遗产。 Web Archive Access Utilities 提供了以下关键功能...

    heritrix-1.14.0-src

    Heritrix的核心功能包括URL调度、HTTP请求与响应处理、网页解析、内容存储等。 在Heritrix 1.14.0的源码中,我们可以找到以下几个关键组件和概念: 1. **URL调度器(Scheduler)**:负责管理待抓取的URL队列,根据...

    heritrix3.2.0源文件

    通过研究Heritrix 3.2.0 源代码,开发者可以学习到如何实现高效且灵活的网络爬虫,如何处理HTTP请求和响应,以及如何解析和存储HTML内容。此外,还可以了解到如何使用事件驱动架构设计大型系统,以及如何管理复杂的...

    Lucene2.0+Heritrix搜索引擎 随书光盘

    2. **可定制的处理器链**:Heritrix的处理器链可以处理HTTP响应,进行HTML解析、内容提取、元数据提取等,可以按照需求添加自定义处理器。 3. **抓取范围控制**:通过种子列表、URL模式和robots.txt协议,Heritrix...

    lucene_heritrix 搜索引擎

    抓取的数据可以被保存为WARC格式,这是一种标准的互联网档案格式,方便后续分析和处理。 将Heritrix与Lucene结合使用,可以构建一个完整的网络搜索引擎。首先,Heritrix爬取互联网上的网页,并将其存储为本地文件。...

    heritrix1.14.4源码+项目

    同时,它还能处理HTTP状态码,如重试失败的请求,或根据响应头决定是否保存页面。 5. **内容处理**:Heritrix允许开发者添加自定义处理器,对抓取到的内容进行处理,如提取元数据、过滤广告、转换格式等。这些...

Global site tag (gtag.js) - Google Analytics