arXiv预印本平台高级检索与API集成解析 (版本 2024.08.02)
TL;DR: 本文档旨在为SRE团队及相关科研人员提供arXiv预印本平台的高级使用指南。内容涵盖精确检索语法、API调用方法(包括arXiv API key怎么用)、以及自动化文献获取流程。目标是优化信息检索效率,减少人工干预。
Pre-requisites:
- 基本的Unix/Linux命令行操作知识。
- Python 3.x环境及
requests库。 - 了解XML/JSON数据结构。
Version: 2024.08.02
Date: August 2, 2024
1. arXiv高级检索语法详解
arXiv提供一套强大的查询语言,支持布尔逻辑、字段限定和日期范围检索,以实现高精度文献发现。
1.1. 基础字段与布尔操作
以下为常用字段标识符及其布尔组合示例。
Note: 字段标识符不区分大小写,但布尔运算符(AND, OR, ANDNOT)必须大写。
1.1.1. 按作者检索。
query=au:"John Doe"
1.1.1.1. 预期输出:检索作者为“John Doe”的论文。
1.1.2. 按标题检索关键词。
query=ti:"Large Language Models" AND abs:"reinforcement learning"
1.1.2.1. 预期输出:检索标题包含“Large Language Models”且摘要包含“reinforcement learning”的论文。
1.1.3. 按类别检索。
query=cat:cs.AI OR cat:cs.CL
1.1.3.1. 预期输出:检索类别为人工智能或计算语言学的论文。
1.2. 日期范围与版本检索
利用提交日期或更新日期进行精确筛选。
1.2.1. 检索特定日期范围内的论文。
query=submittedDate:[20230101 TO 20231231] AND cat:cs.CV
1.2.1.1. 预期输出:检索2023年提交的计算机视觉领域论文。
1.2.2. 检索最新版本。通常在API中使用。
2. arXiv API集成与自动化下载
arXiv API允许程序化访问论文元数据和PDF链接,是实现自动化工作流的关键。这回答了arXiv论文怎么下载的自动化需求。
2.1. API基础用法
API Endpoint: http://export.arxiv.org/api/query
2.1.1. 构建API请求URL。
import requests
base_url = "http://export.arxiv.org/api/query"
search_query = 'cat:cs.AI AND submittedDate:[20240101 TO 20240131]'
max_results = 5
params = {
'search_query': search_query,
'start': 0,
'max_results': max_results,
'sortBy': 'submittedDate',
'sortOrder': 'descending'
}
response = requests.get(base_url, params=params)
print(response.url)
2.1.1.1. 预期输出:
http://export.arxiv.org/api/query?search_query=cat%3Acs.AI+AND+submittedDate%3A%5B20240101+TO+20240131%5D&start=0&max_results=5&sortBy=submittedDate&sortOrder=descending
2.1.2. 解析API响应并提取PDF链接。arXiv下载器的实现核心。
import xml.etree.ElementTree as ET
root = ET.fromstring(response.content)
# Namespace for Atom feeds
ns = {'atom': 'http://www.w3.org/2005/Atom'}
for entry in root.findall('atom:entry', ns):
title = entry.find('atom:title', ns).text.strip()
pdf_link = ''
for link in entry.findall('atom:link', ns):
if 'type' in link.attrib and link.attrib['type'] == 'application/pdf':
pdf_link = link.attrib['href']
break
print(f"Title: {title}\nPDF Link: {pdf_link}\n---")
2.1.2.1. 预期输出 (部分):
Title: On the Sample Complexity of Reinforcement Learning with a Generative Model
PDF Link: http://arxiv.org/pdf/2401.00001v1
---
Title: Scaling Laws for Neuro-Symbolic AI
PDF Link: http://arxiv.org/pdf/2401.00002v1
---
2.2. 自动化PDF下载
结合API获取的PDF链接,实现批量下载。
Warning: 请遵守arXiv的使用政策,避免对服务器造成过大负载。建议设置合理的请求间隔。
2.2.1. 下载单个PDF文件。
import os
def download_pdf(url, filename):
try:
response = requests.get(url, stream=True)
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"Downloaded: {filename}")
except requests.exceptions.RequestException as e:
print(f"Error downloading {url}: {e}")
# Example usage from previous step's 'pdf_link'
# download_pdf("http://arxiv.org/pdf/2401.00001v1", "2401.00001v1.pdf")
2.2.1.1. 预期输出:
Downloaded: 2401.00001v1.pdf