Web scraping 用于查询CommonCrawl以填充数字对象标识符(DOI)数据库的Java API

Web scraping 用于查询CommonCrawl以填充数字对象标识符(DOI)数据库的Java API,web-scraping,common-crawl,Web Scraping,Common Crawl,我正在尝试创建一个在internet上找到的数字对象标识符(DOI)数据库 通过手动搜索CommonCrawl索引服务器,我获得了一些有希望的结果 然而,我希望开发一个程序化的解决方案 这可能导致我的流程只需要读取索引文件,而不需要读取基础WARC数据文件 我希望自动化的手动步骤如下:- 1) 。对于每个CommonCrawl当前可用的索引集合: 2) 。我搜索。。。“在此集合中搜索url:(通配符--前缀:http://example.com/*域名:**.example.com)“例如lin

我正在尝试创建一个在internet上找到的数字对象标识符(DOI)数据库

通过手动搜索
CommonCrawl
索引服务器,我获得了一些有希望的结果

然而,我希望开发一个程序化的解决方案

这可能导致我的流程只需要读取索引文件,而不需要读取基础WARC数据文件

我希望自动化的手动步骤如下:-

1) 。对于每个
CommonCrawl
当前可用的索引集合:

2) 。我搜索。。。“
在此集合中搜索url:(通配符--前缀:http://example.com/*域名:**.example.com)
“例如
link.springer.com/*

3) 。这将返回大约6MB的json数据,其中包含大约22K个唯一的DOI

如何浏览所有可用的
CommonCrawl
索引,而不是搜索特定URL

通过阅读CommonCrawl的API文档,我看不到如何浏览所有索引以提取所有域的所有DOI

更新

我找到了这个示例java代码

这显示了如何访问公共爬网数据集

但是,当我运行它时,我会收到此异常

"main" org.jets3t.service.S3ServiceException: Service Error Message. -- ResponseCode: 404, ResponseStatus: Not Found, XML Error Message: <?xml version="1.0" encoding="UTF-8"?><Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>common-crawl/crawl-data/CC-MAIN-2016-26/segments/1466783399106.96/warc/CC-MAIN-20160624154959-00160-ip-10-164-35-72.ec2.internal.warc.gz</Key><RequestId>1FEFC14E80D871DE</RequestId><HostId>yfmhUAwkdNeGpYPWZHakSyb5rdtrlSMjuT5tVW/Pfu440jvufLuuTBPC25vIPDr4Cd5x4ruSCHQ=</HostId></Error>
事实上,我试图读取的每个文件都会导致相同的错误。为什么呢


他们的数据集的正确通用爬网uri是什么?

数据集位置自一年多以来发生了更改,请参阅。但是,许多示例和库仍然包含旧的指针。您可以在
s3://commoncrawl/cc index/collections/cc-MAIN-YYYY-WW/indexes/cdx-00xxx.gz上访问2013年之前所有爬网的索引文件
-将
YYYY-WW
替换为爬网的年份和周,并将
xxx
扩展到000-299以获得所有300个索引部分。新的爬网数据将在上公布,或阅读更多信息。

自一年多以来,数据集位置已更改,请参阅。但是,许多示例和库仍然包含旧的指针。您可以在
s3://commoncrawl/cc index/collections/cc-MAIN-YYYY-WW/indexes/cdx-00xxx.gz上访问2013年之前所有爬网的索引文件
-将
YYYY-WW
替换为爬网的年份和周,并将
xxx
扩展到000-299以获得所有300个索引部分。新的爬网数据将在上公布,或阅读更多信息。

要使示例代码正常工作,请将第24行和第25行替换为:

String fn = "crawl-data/CC-MAIN-2013-48/segments/1386163035819/warc/CC-MAIN-20131204131715-00000-ip-10-33-133-15.ec2.internal.warc.gz";
S3Object f = s3s.getObject("commoncrawl", fn, null, null, null, null, null, null);

还要注意,commoncrawl组有。

要使示例代码正常工作,请将第24行和第25行替换为:

String fn = "crawl-data/CC-MAIN-2013-48/segments/1386163035819/warc/CC-MAIN-20131204131715-00000-ip-10-33-133-15.ec2.internal.warc.gz";
S3Object f = s3s.getObject("commoncrawl", fn, null, null, null, null, null, null);

还要注意,commoncrawl组有。

但是,当我尝试使用s3://commoncrawl/prefix时,我的java代码(如上所示)仍然给出相同的错误。我是否需要设置Amazon帐户事件以通过此代码访问公共s3数据集?在没有AWS帐户的情况下访问数据是可能的。最简单的方法是使用and
aws--no sign request s3…
。应该是从AWS上的Hadoop集群运行的,该集群位于承载公共爬网数据的us-east-1区域。但是,当我尝试使用s3://commoncrawl/prefix时,我的java代码(如上所示)仍然给出相同的错误。我是否需要设置Amazon帐户事件以通过此代码访问公共s3数据集?在没有AWS帐户的情况下访问数据是可能的。最简单的方法是使用and
aws--no sign request s3…
。这些应用程序应该从承载公共爬网数据的us-east-1地区AWS上的Hadoop群集运行。如何使用s3 java库读取WARC文件中的偏移量?我在调用“archiveReader.get(10L)”时得到Mark不支持,我不知道。您可能想发布一个新问题。但是如果你看一下文档,你可能会找到一个答案——看起来这个方法接受偏移量参数。如何使用S3Java库读取WARC文件中的偏移量?我在调用“archiveReader.get(10L)”时得到Mark不支持,我不知道。您可能想发布一个新问题。但是,如果您查看了文档,您可能会找到一个答案-该方法似乎接受偏移量参数。