arXiv Research
Durchsuchen und Abrufen wissenschaftlicher Arbeiten von arXiv über die kostenlose REST-API. Kein API-Schlüssel, keine Abhängigkeiten – nur curl.
Kurzreferenz
| Aktion | Befehl |
|---|---|
| Arbeiten suchen | curl "https://export.arxiv.org/api/query?search_query=all:QUERY&max_results=5" |
| Bestimmtes Paper abrufen | curl "https://export.arxiv.org/api/query?id_list=2402.03300" |
| Abstract lesen (Web) | web_extract(urls=["https://arxiv.org/abs/2402.03300"]) |
| Vollständiges Paper lesen (PDF) | web_extract(urls=["https://arxiv.org/pdf/2402.03300"]) |
Arbeiten suchen
Die API gibt Atom-XML zurück. Mit grep/sed parsen oder durch python3 für saubere Ausgabe leiten.
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' Abstract: {summary}...')
print(f' PDF: https://arxiv.org/pdf/{arxiv_id}')
print()
"
Suchabfragesyntax
| Präfix | Sucht in | Beispiel |
|---|---|---|
all: | Alle Felder | all:transformer+attention |
ti: | Titel | ti:large+language+models |
au: | Autor | au:vaswani |
abs: | Abstract | 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
# Exakte Phrase
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 | Ergebnisversatz (0-basiert) |
max_results | Anzahl der Ergebnisse (Standard 10, max. 30000) |
# Neueste 10 Arbeiten in cs.AI
curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=10"
Bestimmte Arbeiten abrufen
# Nach arXiv-ID
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300"
# Mehrere Arbeiten
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300,2401.12345,2403.00001"
BibTeX-Generierung
Nach dem Abrufen der Metadaten einer Arbeit einen BibTeX-Eintrag generieren:
{% raw %}
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('}')
"
{% endraw %}
Inhalt einer Arbeit lesen
Nachdem eine Arbeit gefunden wurde, lesen Sie sie:
# Abstract-Seite (schnell, Metadaten + Abstract)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])
# Vollständiges Paper (PDF → Markdown via Firecrawl)
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])
Für die lokale PDF-Verarbeitung siehe den Skill ocr-and-documents.
Häufige Kategorien
| Kategorie | Fachgebiet |
|---|---|
cs.AI | Künstliche Intelligenz |
cs.CL | Computerlinguistik (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 | Computerphysik |
Vollständige Liste: https://arxiv.org/category_taxonomy
Hilfsskript
Das Skript scripts/search_arxiv.py übernimmt die XML-Parsing und liefert 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 (Zitationen, verwandte Arbeiten, Autorenprofile)
arXiv liefert keine Zitationsdaten oder Empfehlungen. Nutzen Sie dafür die Semantic Scholar API – kostenlos, kein Schlüssel für die Basisfunktion (1 Anfrage/Sekunde), liefert JSON.
Paper-Details + Zitationen 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"
Zitationen EINER Arbeit abrufen (wer sie zitiert hat)
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 AUS einer Arbeit abrufen (was sie 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
Arbeiten suchen (Alternative zur arXiv-Suche, liefert 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
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 - Bewerten:
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID?fields=citationCount,influentialCitationCount" - Abstract lesen:
web_extract(urls=["https://arxiv.org/abs/ID"]) - Vollständiges Paper 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-Empfehlungsendpunkt
- Autoren verfolgen:
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NAME"
Ratenbegrenzungen
| API | Rate | Authentifizierung |
|---|---|---|
| arXiv | ~1 Anfrage / 3 Sekunden | Keine erforderlich |
| Semantic Scholar | 1 Anfrage / Sekunde | Keine (100/Sek. mit API-Schlüssel) |
Hinweise
- arXiv gibt Atom-XML zurück – verwenden Sie das Hilfsskript oder den Parsing-Code für saubere Ausgabe
- Semantic Scholar gibt JSON zurück – mit
python3 -m json.toolfür Lesbarkeit formatieren - arXiv-IDs: altes Format (
hep-th/0601001) vs. neues (2402.03300) - PDF:
https://arxiv.org/pdf/{id}– Abstract:https://arxiv.org/abs/{id} - HTML (falls verfügbar):
https://arxiv.org/html/{id} - Für lokale PDF-Verarbeitung siehe den Skill
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- Beim Generieren von Zitationen das tatsächlich gelesene Versionssuffix beibehalten, um Zitationsdrift zu vermeiden (eine spätere Version kann den Inhalt erheblich ändern)
- Das
<id>-Feld der API gibt die versionierte URL zurück (z. B.http://arxiv.org/abs/1706.03762v7)
Zurückgezogene Arbeiten
Arbeiten können nach der Einreichung zurückgezogen werden. In diesem Fall:
- Das
<summary>-Feld enthält einen Rückzugsvermerk (nach „withdrawn“ oder „retracted“ suchen) - Metadatenfelder können unvollständig sein
- Immer die Zusammenfassung prüfen, bevor ein Ergebnis als gültige Arbeit behandelt wird