Recherche arXiv
Recherchez et récupérez des articles académiques depuis arXiv via leur API REST gratuite. Pas de clé API, pas de dépendances — juste curl.
Référence rapide
| Action | Commande |
|---|---|
| Rechercher des articles | curl "https://export.arxiv.org/api/query?search_query=all:QUERY&max_results=5" |
| Obtenir un article spécifique | curl "https://export.arxiv.org/api/query?id_list=2402.03300" |
| Lire le résumé (web) | web_extract(urls=["https://arxiv.org/abs/2402.03300"]) |
| Lire l'article complet (PDF) | web_extract(urls=["https://arxiv.org/pdf/2402.03300"]) |
Recherche d'articles
L'API renvoie du XML Atom. Analysez-le avec grep/sed ou passez-le par python3 pour une sortie propre.
Recherche simple
curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5"
Sortie propre (analyse XML vers un format lisible)
curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5&sortBy=submittedDate&sortOrder=descending" | python3 -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom'}
root = ET.parse(sys.stdin).getroot()
for i, entry in enumerate(root.findall('a:entry', ns)):
title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
arxiv_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
published = entry.find('a:published', ns).text[:10]
authors = ', '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
summary = entry.find('a:summary', ns).text.strip()[:200]
cats = ', '.join(c.get('term') for c in entry.findall('a:category', ns))
print(f'{i+1}. [{arxiv_id}] {title}')
print(f' Auteurs : {authors}')
print(f' Publié : {published} | Catégories : {cats}')
print(f' Résumé : {summary}...')
print(f' PDF : https://arxiv.org/pdf/{arxiv_id}')
print()
"
Syntaxe des requêtes de recherche
| Préfixe | Recherche | Exemple |
|---|---|---|
all: | Tous les champs | all:transformer+attention |
ti: | Titre | ti:large+language+models |
au: | Auteur | au:vaswani |
abs: | Résumé | abs:reinforcement+learning |
cat: | Catégorie | cat:cs.AI |
co: | Commentaire | co:accepted+NeurIPS |
Opérateurs booléens
# ET (par défaut lorsqu'on utilise +)
search_query=all:transformer+attention
# OU
search_query=all:GPT+OR+all:BERT
# ET NON
search_query=all:language+model+ANDNOT+all:vision
# Phrase exacte
search_query=ti:"chain+of+thought"
# Combiné
search_query=au:hinton+AND+cat:cs.LG
Tri et pagination
| Paramètre | Options |
|---|---|
sortBy | relevance, lastUpdatedDate, submittedDate |
sortOrder | ascending, descending |
start | Décalage des résultats (basé sur 0) |
max_results | Nombre de résultats (défaut 10, max 30000) |
# Les 10 derniers articles en cs.AI
curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=10"
Récupération d'articles spécifiques
# Par ID arXiv
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300"
# Plusieurs articles
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300,2401.12345,2403.00001"
Génération BibTeX
Après avoir récupéré les métadonnées d'un article, générez une entrée BibTeX :
curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python3 -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom', 'arxiv': 'http://arxiv.org/schemas/atom'}
root = ET.parse(sys.stdin).getroot()
entry = root.find('a:entry', ns)
if entry is None: sys.exit('Article non trouvé')
title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
authors = ' and '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
year = entry.find('a:published', ns).text[:4]
raw_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
cat = entry.find('arxiv:primary_category', ns)
primary = cat.get('term') if cat is not None else 'cs.LG'
last_name = entry.find('a:author', ns).find('a:name', ns).text.split()[-1]
print(f'@article{{{last_name}{year}_{raw_id.replace(".", "")},')
print(f' title = {{{title}}},')
print(f' author = {{{authors}}},')
print(f' year = {{{year}}},')
print(f' eprint = {{{raw_id}}},')
print(f' archivePrefix = {{arXiv}},')
print(f' primaryClass = {{{primary}}},')
print(f' url = {{https://arxiv.org/abs/{raw_id}}}')
print('}')
"
Lecture du contenu des articles
Après avoir trouvé un article, lisez-le :
# Page du résumé (rapide, métadonnées + résumé)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])
# Article complet (PDF → markdown via Firecrawl)
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])
Pour le traitement local de PDF, voir la compétence ocr-and-documents.
Catégories courantes
| Catégorie | Domaine |
|---|---|
cs.AI | Intelligence Artificielle |
cs.CL | Langage et Calcul (TAL) |
cs.CV | Vision par Ordinateur |
cs.LG | Apprentissage Automatique |
cs.CR | Cryptographie et Sécurité |
stat.ML | Apprentissage Automatique (Statistiques) |
math.OC | Optimisation et Contrôle |
physics.comp-ph | Physique Computationnelle |
Liste complète : https://arxiv.org/category_taxonomy
Script d'aide
Le script scripts/search_arxiv.py gère l'analyse XML et fournit une sortie propre :
python scripts/search_arxiv.py "GRPO reinforcement learning"
python scripts/search_arxiv.py "transformer attention" --max 10 --sort date
python scripts/search_arxiv.py --author "Yann LeCun" --max 5
python scripts/search_arxiv.py --category cs.AI --sort date
python scripts/search_arxiv.py --id 2402.03300
python scripts/search_arxiv.py --id 2402.03300,2401.12345
Aucune dépendance — utilise uniquement la bibliothèque standard Python.
Semantic Scholar (Citations, articles connexes, profils d'auteurs)
arXiv ne fournit pas de données de citations ni de recommandations. Utilisez l'API Semantic Scholar pour cela — gratuite, sans clé nécessaire pour une utilisation de base (1 requête/seconde), renvoie du JSON.
Obtenir les détails d'un article + citations
# Par ID arXiv
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300?fields=title,authors,citationCount,referenceCount,influentialCitationCount,year,abstract" | python3 -m json.tool
# Par ID Semantic Scholar ou DOI
curl -s "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example?fields=title,citationCount"
Obtenir les citations D'UN article (qui l'a cité)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/citations?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool
Obtenir les références D'UN article (ce qu'il cite)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/references?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool
Rechercher des articles (alternative à la recherche arXiv, renvoie du JSON)
curl -s "https://api.semanticscholar.org/graph/v1/paper/search?query=GRPO+reinforcement+learning&limit=5&fields=title,authors,year,citationCount,externalIds" | python3 -m json.tool
Obtenir des recommandations d'articles
curl -s -X POST "https://api.semanticscholar.org/recommendations/v1/papers/" \
-H "Content-Type: application/json" \
-d '{"positivePaperIds": ["arXiv:2402.03300"], "negativePaperIds": []}' | python3 -m json.tool
Profil d'auteur
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount" | python3 -m json.tool
Champs utiles de Semantic Scholar
title, authors, year, abstract, citationCount, referenceCount, influentialCitationCount, isOpenAccess, openAccessPdf, fieldsOfStudy, publicationVenue, externalIds (contient l'ID arXiv, DOI, etc.)
Flux de travail complet de recherche
- Découvrir :
python scripts/search_arxiv.py "votre sujet" --sort date --max 10 - Évaluer l'impact :
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID?fields=citationCount,influentialCitationCount" - Lire le résumé :
web_extract(urls=["https://arxiv.org/abs/ID"]) - Lire l'article complet :
web_extract(urls=["https://arxiv.org/pdf/ID"]) - Trouver les travaux connexes :
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID/references?fields=title,citationCount&limit=20" - Obtenir des recommandations : POST vers le point de terminaison de recommandations Semantic Scholar
- Suivre les auteurs :
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NOM"
Limites de débit
| API | Débit | Authentification |
|---|---|---|
| arXiv | ~1 requête / 3 secondes | Aucune nécessaire |
| Semantic Scholar | 1 requête / seconde | Aucune (100/s avec clé API) |
Remarques
- arXiv renvoie du XML Atom — utilisez le script d'aide ou l'extrait d'analyse pour une sortie propre
- Semantic Scholar renvoie du JSON — passez-le par
python3 -m json.toolpour une meilleure lisibilité - IDs arXiv : format ancien (
hep-th/0601001) vs nouveau (2402.03300) - PDF :
https://arxiv.org/pdf/{id}— Résumé :https://arxiv.org/abs/{id} - HTML (lorsqu'il est disponible) :
https://arxiv.org/html/{id} - Pour le traitement local de PDF, voir la compétence
ocr-and-documents
Gestion des versions
arxiv.org/abs/1706.03762redirige toujours vers la dernière versionarxiv.org/abs/1706.03762v1pointe vers une version spécifique et immuable- Lors de la génération de citations, conservez le suffixe de version que vous avez réellement lu pour éviter la dérive de citation (une version ultérieure peut modifier le contenu de manière substantielle)
- Le champ
<id>de l'API renvoie l'URL versionnée (par ex.,http://arxiv.org/abs/1706.03762v7)
Articles retirés
Les articles peuvent être retirés après soumission. Dans ce cas :
- Le champ
<summary>contient un avis de retrait (cherchez "withdrawn" ou "retracted") - Les champs de métadonnées peuvent être incomplets
- Vérifiez toujours le résumé avant de traiter un résultat comme un article valide