Was macht arXiv Research?
Suchen und Abrufen von akademischen Papieren aus arXiv über deren kostenlose REST-API. Kein API-Schlüssel, keine Abhängigkeiten – nur curl.
Kurzreferenz
| Aktion | Befehl |
|---|---|
| Papier suchen | curl "https://export.arxiv.org/api/query?search_query=all:QUERY&max_results=5" |
| Bestimmtes Papier abrufen | curl "https://export.arxiv.org/api/query?id_list=2402.03300" |
| Zusammenfassung lesen (Web) | web_extract(urls=["https://arxiv.org/abs/2402.03300"]) |
| Volltext lesen (PDF) | web_extract(urls=["https://arxiv.org/pdf/2402.03300"]) |
Papier suchen
Die API gibt Atom-XML zurück. Mit grep/sed parsen oder durch python3 pipen, um saubere Ausgabe zu erhalten.
Einfache Suche
curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5"
Saubere Ausgabe (XML in lesbares Format parsen)
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' Autoren: {authors}')
print(f' Veröffentlicht: {published} | Kategorien: {cats}')
print(f' Zusammenfassung: {summary}...')
print(f' PDF: https://arxiv.org/pdf/{arxiv_id}')
print()
"
Suchanfrage-Syntax
| Präfix | Durchsucht | Beispiel |
|---|---|---|
all: | Alle Felder | all:transformer+attention |
ti: | Titel | ti:large+language+models |
au: | Autor | au:vaswani |
abs: | Zusammenfassung | abs:reinforcement+learning |
cat: | Kategorie | cat:cs.AI |
co: | Kommentar | co:accepted+NeurIPS |
Boolesche Operatoren
# UND (Standard bei Verwendung von +)
search_query=all:transformer+attention
# ODER
search_query=all:GPT+OR+all:BERT
# UND NICHT
search_query=all:language+model+ANDNOT+all:vision
# Exakter Ausdruck
search_query=ti:"chain+of+thought"
# Kombiniert
search_query=au:hinton+AND+cat:cs.LG
Sortierung und Paginierung
| Parameter | Optionen |
|---|---|
sortBy | relevance, lastUpdatedDate, submittedDate |
sortOrder | ascending, descending |
start | Ergebnis-Offset (0-basiert) |
max_results | Anzahl der Ergebnisse (Standard 10, max. 30000) |
# Neueste 10 Paper in cs.AI
curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=10"
Bestimmte Paper abrufen
# Nach arXiv-ID
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300"
# Mehrere Paper
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300,2401.12345,2403.00001"
BibTeX-Erzeugung
Nachdem Sie Metadaten für ein Paper abgerufen haben, generieren Sie einen BibTeX-Eintrag:
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('Paper nicht gefunden')
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('}')
"
Inhalt von Papern lesen
Nachdem Sie ein Paper gefunden haben, lesen Sie es:
# Zusammenfassungsseite (schnell, Metadaten + Zusammenfassung)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])
# Volltext (PDF → Markdown via Firecrawl)
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])
Für die lokale PDF-Verarbeitung siehe die Fähigkeit ocr-and-documents.
Häufige Kategorien
| Kategorie | Bereich |
|---|---|
cs.AI | Künstliche Intelligenz |
cs.CL | Computation and Language (NLP) |
cs.CV | Computer Vision |
cs.LG | Maschinelles Lernen |
cs.CR | Kryptographie und Sicherheit |
stat.ML | Maschinelles Lernen (Statistik) |
math.OC | Optimierung und Steuerung |
physics.comp-ph | Computational Physics |
Vollständige Liste: https://arxiv.org/category_taxonomy
Hilfsskript
Das Skript scripts/search_arxiv.py verarbeitet XML und liefert eine saubere Ausgabe:
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
Keine Abhängigkeiten – nur Python-Standardbibliothek.
Semantic Scholar (Zitate, verwandte Paper, Autorenprofile)
arXiv liefert keine Zitationsdaten oder Empfehlungen. Verwenden Sie dafür die Semantic Scholar API – kostenlos, kein Schlüssel für den Basisgebrauch (1 req/s), gibt JSON zurück.
Paper-Details + Zitate abrufen
# Nach arXiv-ID
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300?fields=title,authors,citationCount,referenceCount,influentialCitationCount,year,abstract" | python3 -m json.tool
# Nach Semantic Scholar Paper-ID oder DOI
curl -s "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example?fields=title,citationCount"
Zitate eines Papers abrufen (wer hat es zitiert)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/citations?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool
Referenzen eines Papers abrufen (was es zitiert)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/references?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool
Paper suchen (Alternative zur arXiv-Suche, gibt JSON zurück)
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
Paper-Empfehlungen abrufen
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
Autorenprofil
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount" | python3 -m json.tool
Nützliche Semantic Scholar Felder
title, authors, year, abstract, citationCount, referenceCount, influentialCitationCount, isOpenAccess, openAccessPdf, fieldsOfStudy, publicationVenue, externalIds (enthält arXiv-ID, DOI, etc.)
Vollständiger Forschungs-Workflow
- Entdecken:
python scripts/search_arxiv.py "Ihr Thema" --sort date --max 10 - Impact bewerten:
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID?fields=citationCount,influentialCitationCount" - Zusammenfassung lesen:
web_extract(urls=["https://arxiv.org/abs/ID"]) - Volltext lesen:
web_extract(urls=["https://arxiv.org/pdf/ID"]) - Verwandte Arbeiten finden:
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID/references?fields=title,citationCount&limit=20" - Empfehlungen abrufen: POST an Semantic Scholar Empfehlungs-Endpunkt
- Autoren verfolgen:
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NAME"
Ratenbegrenzungen
| API | Rate | Authentifizierung |
|---|---|---|
| arXiv | ~1 req / 3 Sekunden | Keine erforderlich |
| Semantic Scholar | 1 req / Sekunde | Keine (100/s mit API-Schlüssel) |
Hinweise
- arXiv gibt Atom-XML zurück – verwenden Sie das Hilfsskript oder das Parsing-Snippet für saubere Ausgabe
- Semantic Scholar gibt JSON zurück – pipen Sie durch
python3 -m json.toolfür Lesbarkeit - arXiv-IDs: altes Format (
hep-th/0601001) vs. neu (2402.03300) - PDF:
https://arxiv.org/pdf/{id}– Zusammenfassung:https://arxiv.org/abs/{id} - HTML (falls verfügbar):
https://arxiv.org/html/{id} - Für lokale PDF-Verarbeitung siehe die Fähigkeit
ocr-and-documents
ID-Versionierung
arxiv.org/abs/1706.03762löst immer zur neuesten Version aufarxiv.org/abs/1706.03762v1zeigt auf eine bestimmte unveränderliche Version- Bei der Erstellung von Zitaten bewahren Sie das tatsächlich gelesene Versionssuffix, um Zitationsabweichungen zu vermeiden (eine spätere Version kann den Inhalt erheblich ändern)
- Das API-
<id>-Feld gibt die versionierte URL zurück (z.B.http://arxiv.org/abs/1706.03762v7)
Zurückgezogene Papers
Papers können nach der Einreichung zurückgezogen werden. In diesem Fall:
- Das
<summary>-Feld enthält einen Rückzugshinweis (suchen Sie nach "withdrawn" oder "retracted") - Metadatenfelder können unvollständig sein
- Überprüfen Sie immer die Zusammenfassung, bevor Sie ein Ergebnis als gültiges Paper behandeln