Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查询特定年份的arXiv?_Python_Api_Urllib_Feedparser - Fatal编程技术网

Python 如何查询特定年份的arXiv?

Python 如何查询特定年份的arXiv?,python,api,urllib,feedparser,Python,Api,Urllib,Feedparser,我使用下面显示的代码从arXiv检索论文。我想检索标题中有“机器”和“学习”两个词的论文。论文的数量很大,因此我想实现一个按年切片(发布) 如何在search\u query中请求2020年和2019年的记录?请注意,我对后期过滤不感兴趣 import urllib.request import time import feedparser # Base api query url base_url = 'http://export.arxiv.org/api/query?'; # Sea

我使用下面显示的代码从arXiv检索论文。我想检索标题中有“机器”和“学习”两个词的论文。论文的数量很大,因此我想实现一个按年切片(
发布

如何在
search\u query
中请求2020年和2019年的记录?请注意,我对后期过滤不感兴趣

import urllib.request

import time
import feedparser

# Base api query url
base_url = 'http://export.arxiv.org/api/query?';

# Search parameters
search_query = urllib.parse.quote("ti:machine learning")
start = 0
total_results = 5000
results_per_iteration = 1000
wait_time = 3

papers = []

print('Searching arXiv for %s' % search_query)

for i in range(start,total_results,results_per_iteration):
    
    print("Results %i - %i" % (i,i+results_per_iteration))
    
    query = 'search_query=%s&start=%i&max_results=%i' % (search_query,
                                                         i,
                                                         results_per_iteration)

    # perform a GET request using the base_url and query
    response = urllib.request.urlopen(base_url+query).read()

    # parse the response using feedparser
    feed = feedparser.parse(response)

    # Run through each entry, and print out information
    for entry in feed.entries:
        #print('arxiv-id: %s' % entry.id.split('/abs/')[-1])
        #print('Title:  %s' % entry.title)
        #feedparser v4.1 only grabs the first author
        #print('First Author:  %s' % entry.author)
        paper = {}
        paper["date"] = entry.published
        paper["title"] = entry.title
        paper["first_author"] = entry.author
        paper["summary"] = entry.summary
        papers.append(paper)
    
    # Sleep a bit before calling the API again
    print('Bulk: %i' % 1)
    time.sleep(wait_time)
根据,没有可用的
发布
日期
字段

您可以做的是按日期排序(通过在查询参数中添加
&sortBy=submittedDate&sortOrder=descending
)并在2018年时停止发出请求

基本上,您的代码应该这样修改:

导入urllib.request
导入时间
导入feedparser
#基本api查询url
基本url=http://export.arxiv.org/api/query?';
#搜索参数
search\u query=urllib.parse.quote(“ti:机器学习”)
i=0
每次迭代的结果=1000
等待时间=3
论文=[]
year=“”
打印('搜索%s的arXiv'%search\u查询)
while(year!=“2018”):#文件日期到2018年时停止请求
打印(“结果%i-%i”%(i,i+每次迭代的结果))
query='search\u query=%s&start=%i&max\u results=%i&sortBy=submittedDate&sortOrder=descending%%(search\u query,
我
结果(每次迭代)
#使用基本url和查询执行GET请求
response=urllib.request.urlopen(base_url+query).read()
#使用feedparser解析响应
feed=feedparser.parse(响应)
#浏览每个条目,并打印信息
对于feed.entries中的条目:
#打印('arxiv-id:%s'%entry.id.split('/abs/')[-1])
#打印('标题:%s'%entry.Title)
#feedparser v4.1只抓取第一作者
#打印('第一作者:%s'%entry.Author)
纸张={}
论文[“日期”]=entry.published
年份=纸张[“日期”][0:4]
论文[“标题”]=条目.title
论文[“第一作者”]=entry.author
论文[“摘要”]=条目。摘要
论文。附加(论文)
#在再次调用API之前先睡一会儿
打印('批量:%i“%1”)
i+=每次迭代的结果
时间。睡眠(等待时间)
对于“后过滤”方法,一旦收集到足够的结果,我会这样做:

papers2019=[如果项目[“日期”][0:4]==“2019”]则文件中的项目对应项目]

根据arXiv的API(和),您在查询中没有该过滤器。这可能是一个可行的解决方案,但他指定他对后期过滤不感兴趣,因此我猜该选项对他无效。谢谢,我的最终目标是检索标题中包含“机器学习”的所有可能论文。我很难完成这个任务,因为每次运行查询时都会返回不同的结果。。。因此我决定按年切片。我不确定我是否正确理解sortBy如何应用于按日期切片。请举例说明如何获取2020年、2019年和2018年的记录?如果不进行后期筛选,您将无法获取“仅2019年”的记录。你能做的最好的事情就是在到达指定日期时停止请求……你能告诉我怎么做吗?另外,请您解释一下,您的后期过滤方法如何允许我从arXiv检索标题中包含“机器学习”的所有可能记录?最后,方法对我来说并不重要。我对最终结果感兴趣。谢谢。当我运行此代码,然后执行
len(papers)
时,我看到532篇论文,这似乎是不现实的。这就是问题所在。你有多少张唱片?