2

我想使用普通爬网检索网页,但我迷路了。

我想获取 www.example.com 的 warc 文件。我看到这个链接(http://index.commoncrawl.org/CC-MAIN-2017-34-index?url=https%3A%2F%2Fwww.example.com&output=json)产生以下json。

{“urlkey”:“com,example)/”,“timestamp”:“20170820000102”,“mime”:“text/html”,“digest”:“B2LTWWPUOYAH7UIPQ7ZUPQ4VMBSVC36A”,“文件名”:“crawl-data/CC- MAIN-2017-34/segments/1502886105955.66/robotstxt/CC-MAIN-20170819235943-20170820015943-00613.warc.gz”,“mime-detected”:“text/html”,“status”:“200”,“offset” :“1109728”,“长度”:“1166”,“网址”:“ http://www.example.com ”}

有人可以指出我如何使用这些 json 元素来检索 HTML 的正确方向。

感谢您帮助菜鸟!

4

1 回答 1

6

从 JSON 结果中获取文件名、偏移量和长度,以填充从 $offset 到 ($offset+$length-1) 的 HTTP 范围请求。添加https://commoncrawl.s3.amazonaws.com/作为文件名的前缀并使用 gzip 解压缩结果,例如

curl -s -r1109728-$((1109728+1166-1)) \
   "https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2017-34/segments/1502886105955.66/robotstxt/CC-MAIN-20170819235943-20170820015943-00613.warc.gz" \
| gzip -dc

当然,在 AWS 上,这可以使用Boto3AWS-CLI完成:

aws --no-sign-request s3api get-object \
 --bucket commoncrawl \
 --key crawl-data/CC-MAIN-2017-34/segments/1502886105955.66/robotstxt/CC-MAIN-20170819235943-20170820015943-00613.warc.gz \
 --range bytes=1109728-$((1109728+1166-1)) response.gz

如果仅针对少数文档并且修改文档并不重要,您可以直接使用索引服务器:http: //index.commoncrawl.org/CC-MAIN-2017-34/http ://www.example .com

于 2017-09-20T07:36:00.827 回答