arXiv Research
Durchsuche und rufe akademische Arbeiten von arXiv über die kostenlose REST-API ab. 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" |
| Bestimmte Arbeit abrufen | curl "https://export.arxiv.org/api/query?id_list=2402.03300" |
| Abstract lesen (Web) | web_extract(urls=["https://arxiv.org/abs/2402.03300"]) |
| Volltext lesen (PDF) | web_extract(urls=["https://arxiv.org/pdf/2402.03300"]) |
Arbeiten durchsuchen
Die API gibt Atom-XML zurück. Analysiere mit grep/sed oder leite durch python für saubere Ausgabe.
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" | python -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()
"
Abfragesyntax
| 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
# Exakter Ausdruck
search_query=ti:"chain+of+thought"
# Kombiniert
search_query=au:hinton+AND+cat:cs.LG
Sortieren 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 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 Abruf der Metadaten einer Arbeit einen BibTeX-Eintrag generieren:
{% raw %}
curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python -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 %}
Arbeitstext lesen
Nachdem du eine Arbeit gefunden hast, lese sie:
# Abstract-Seite (schnell, Metadaten + Abstract)
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 das Skill ocr-and-documents.
Häufige Kategorien
| Kategorie | Bereich |
|---|---|
cs.AI | Künstliche Intelligenz |
cs.CL | Computerlinguistik (NLP) |
cs.CV | Computersehen (Computer Vision) |
cs.LG | Maschinelles Lernen |
cs.CR | Kryptografie 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-Analyse 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 – verwendet nur die Python-Standardbibliothek.
Semantic Scholar (Zitate, verwandte Arbeiten, Autorenprofile)
arXiv liefert keine Zitierdaten oder Empfehlungen. Verwende dafür die Semantic Scholar API – kostenlos, kein Schlüssel für die Basisnutzung erforderlich (1 req/s), gibt JSON zurück.
Arbeitsdetails + 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" | python -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 EINER Arbeit abrufen (wer hat sie zitiert)
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/citations?fields=title,authors,year,citationCount&limit=10" | python -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" | python -m json.tool
Arbeiten 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" | python -m json.tool
Empfehlungen für Arbeiten abrufen
curl -s -X POST "https://api.semanticscholar.org/recommendations/v1/papers/" \
-H "Content-Type: application/json" \
-d '{"positivePaperIds": ["arXiv:2402.03300"], "negativePaperIds": []}' | python -m json.tool
Autorenprofil
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount" | python -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 "dein Thema" --sort date --max 10 - Einfluss 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"]) - 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 erhalten: POST an den Semantic Scholar Empfehlungsendpunkt
- Autoren verfolgen:
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NAME"
Ratenbegrenzungen
| API | Rate | Auth |
|---|---|---|
| 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 – verwende das Hilfsskript oder das Parsing-Snippet für saubere Ausgabe
- Semantic Scholar gibt JSON zurück – leite durch
python -m json.toolfür Lesbarkeit - arXiv-IDs: altes Format (
hep-th/0601001) vs. neues (2402.03300) - PDF:
https://arxiv.org/pdf/{id}– Abstract:https://arxiv.org/abs/{id} - HTML (sofern verfügbar):
https://arxiv.org/html/{id} - Für lokale PDF-Verarbeitung siehe das Skill
ocr-and-documents
ID-Versionierung
arxiv.org/abs/1706.03762löst immer zur aktuellsten Version aufarxiv.org/abs/1706.03762v1zeigt auf eine bestimmte, unveränderliche Version- Beim Erstellen von Zitationen die tatsächlich gelesene Version beibehalten, um Zitierdrift zu vermeiden (eine spätere Version kann den Inhalt wesentlich ändern)
- Das API-
<id>-Feld 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ückzugshinweis (suche nach "withdrawn" oder "retracted") - Metadatenfelder können unvollständig sein
- Überprüfe immer die Zusammenfassung, bevor du ein Ergebnis als gültige Arbeit behandelst