arxiv.py
arXiv API的Python封装。
arXiv是康奈尔大学图书馆的一个项目,提供超过100万篇物理学、数学、计算机科学、定量生物学、定量金融和统计学领域文章的开放访问。
使用方法
安装
$ pip install arxiv
在你的Python脚本中,包含以下行:
import arxiv
示例
获取结果
import arxiv
# 构建默认API客户端
client = arxiv.Client()
# 搜索与"quantum"关键词匹配的10篇最新文章
search = arxiv.Search(
query = "quantum",
max_results = 10,
sort_by = arxiv.SortCriterion.SubmittedDate
)
results = client.results(search)
# `results`是一个生成器;你可以一个一个地遍历其元素...
for r in client.results(search):
print(r.title)
# ...或将其耗尽到一个列表中。注意:对于大型结果集来说,这个操作很慢。
all_results = list(results)
print([r.title for r in all_results])
# 有关高级查询语法的文档,请参阅arXiv API用户手册:
# https://arxiv.org/help/api/user-manual#query_details
search = arxiv.Search(query = "au:del_maestro AND ti:checkerboard")
first_result = next(client.results(search))
print(first_result)
# 搜索ID为"1605.08386v1"的论文
search_by_id = arxiv.Search(id_list=["1605.08386v1"])
# 重用客户端获取论文,然后打印其标题
first_result = next(client.results(search))
print(first_result.title)
下载论文
要下载ID为"1605.08386v1"的论文的PDF,运行Search
然后使用Result.download_pdf()
:
import arxiv
paper = next(arxiv.Client().results(arxiv.Search(id_list=["1605.08386v1"])))
# 使用默认文件名将PDF下载到当前工作目录
paper.download_pdf()
# 使用自定义文件名将PDF下载到当前工作目录
paper.download_pdf(filename="downloaded-paper.pdf")
# 使用自定义文件名将PDF下载到指定目录
paper.download_pdf(dirpath="./mydir", filename="downloaded-paper.pdf")
同样的接口也可用于下载论文源文件的.tar.gz文件:
import arxiv
paper = next(arxiv.Client().results(arxiv.Search(id_list=["1605.08386v1"])))
# 使用默认文件名将归档文件下载到当前工作目录
paper.download_source()
# 使用自定义文件名将归档文件下载到当前工作目录
paper.download_source(filename="downloaded-paper.tar.gz")
# 使用自定义文件名将归档文件下载到指定目录
paper.download_source(dirpath="./mydir", filename="downloaded-paper.tar.gz")
使用自定义客户端获取结果
import arxiv
big_slow_client = arxiv.Client(
page_size = 1000,
delay_seconds = 10.0,
num_retries = 5
)
# 在需要再次请求之前打印1000个标题
for result in big_slow_client.results(arxiv.Search(query="quantum")):
print(result.title)
日志记录
要检查此包的网络行为和API逻辑,配置一个DEBUG
级别的日志记录器。
>>> import logging, arxiv
>>> logging.basicConfig(level=logging.DEBUG)
>>> client = arxiv.Client()
>>> paper = next(client.results(arxiv.Search(id_list=["1605.08386v1"])))
INFO:arxiv.arxiv:Requesting 100 results at offset 0
INFO:arxiv.arxiv:Requesting page (first: False, try: 0): https://export.arxiv.org/api/query?search_query=&id_list=1605.08386v1&sortBy=relevance&sortOrder=descending&start=0&max_results=100
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): export.arxiv.org:443
DEBUG:urllib3.connectionpool:https://export.arxiv.org:443 "GET /api/query?search_query=&id_list=1605.08386v1&sortBy=relevance&sortOrder=descending&start=0&max_results=100&user-agent=arxiv.py%2F1.4.8 HTTP/1.1" 200 979
类型
Client
Client
指定了一个可重用的策略,用于从arXiv的API获取结果。对于大多数用例,默认客户端应该足够了。
客户端配置指定分页和重试逻辑。重用客户端允许连续的API调用使用相同的连接池,并确保它们遵守你设置的速率限制。
Search
Search
指定对arXiv数据库的搜索。使用Client.results
获取一个生成Result
的生成器。
Result
由Client.results
生成的Result
对象包含每篇论文的元数据和下载其内容的辅助方法。
底层原始数据的含义在arXiv API用户手册:Atom结果返回详情中有文档说明。
Result
还提供了下载论文的辅助方法:Result.download_pdf
和Result.download_source
。