Beste Nachrichten-API für Python-Entwickler in 2026
Die meisten Python Artikel über Nachrichten-APIs binden Sie an NewsAPI.org, da dies der einzige Anbieter mit einem aktualisierten Pip-Wrapper ist. Die beste Nachrichten-API für Python in 2026 hängt davon ab, was Sie erstellen: einen Prototyp, eine asynchrone Pipeline, ein Pandas-Analyse-Notebook oder einen Produktionsdienst mit Wiederholungsversuchen. Nachfolgend sind sechs Optionen aufgeführt, jeweils mit ausführbarem Code, sowie drei Code-Muster, die jede Python Nachrichten-Pipeline benötigt (asynchron, Pandas, Wiederholungsversuch).
Dieser Artikel richtet sich an Python-Entwickler (fortgeschritten+) bei der Auswahl einer Bibliothek und API für ein reales Projekt. Alle Snippets zielen auf Python 3.11+ ab.
Offenlegung
APITube ist mein Projekt. Es wird unten neben allen anderen Anbietern eingestuft und erscheint in der Stufe „native requests“, da es keine offizielle Python SDK mitliefert.
TL;DR
| # | Option | Wraps | Async? | Kostenlose Stufe kommerziell? | Installieren |
|---|---|---|---|---|---|
| 1 | newsapi-python | NewsAPI.org | Nein | Nein | pip install newsapi-python |
| 2 | Rohe requests → APITube | APITube | Nein (httpx verwenden) | Nur für Entwickler | pip install requests |
| 3 | Rohe requests → NewsData.io | NewsData.io | Nein | Nur für Entwickler | pip install requests |
| 4 | gnews | Google Nachrichten RSS | Nein | N/A (Scraper) | pip install gnews |
| 5 | asyncnewsapi | NewsAPI.org | Ja | Nein | pip install asyncnewsapi |
| 6 | httpx.AsyncClient (generisch) | Alle | Ja | Abhängig | pip install httpx |
Auswahl nach Szenario: Prototyp mit kostenlosen Schlagzeilen: #4. Produktions-Feed mit NLP: #2. Historische Recherche: #3. Asynchroner Pipeline über mehrere Anbieter hinweg: #6. Festgefahren im Mainstream-Wrapper: #1.
1. newsapi-python — der Standard-Wrapper
Das beliebteste PyPI-Nachrichten-API-Paket mit großem Abstand. Offiziell (von der Community gepflegt, von der NewsAPI.org-Dokumentation unterstützt). Nur Synchronisation, aber die API ist sauber.
from newsapi import NewsApiClient
client = NewsApiClient(api_key="YOUR_NEWSAPI_KEY")
response = client.get_everything(
q="federal reserve",
language="en",
page_size=5,
)
for article in response["articles"]:
print(article["title"], "-", article["source"]["name"])
Wann zu verwenden: einmalige Skripte, Tutorials, Notebooks, alles Synchrone. Der Wrapper reduziert den Boilerplate-Code um vielleicht 3 Zeilen im Vergleich zu rohem requests.
Wann überspringen: asynchrone Workloads (keine Coroutine-Unterstützung), wenn du Artikeltexte brauchst (NewsAPI.org liefert sie in keinem Tarif), oder wenn du ein Budget hast — der erste kommerzielle Plan kostet $449/Monat.
2. Rohes requests → APITube
APITube hat keine offizielle Python SDK. Für 95% der Anwendungsfälle benötigen Sie keine – 10 Zeilen requests erledigen die Aufgabe und liefern umfangreichere Daten (Sentiment, Entitäten, vollständiger Text) als die oben genannten Wrapper-Alternativen.
import requests
response = requests.get(
"https://api.apitube.io/v1/news/everything",
headers={"X-API-Key": "YOUR_APITUBE_KEY"},
params={
"title": "federal reserve",
"language.code": "en",
"per_page": 5,
},
timeout=10,
)
response.raise_for_status()
for article in response.json()["results"]:
sentiment = article["sentiment"]["overall"]["score"]
print(f"{article['title']} — sentiment={sentiment:+.2f}")
Wann verwenden: Jede Pipeline, die Sentiment, Entitäten oder den vollständigen Artikelkörper out-of-the-box benötigt; Produktionsdienste, bei denen Sie sich nicht auf einen Drittanbieter-Wrapper verlassen möchten; überall dort, wo Sie 12+ Monate an Verlaufshistorie benötigen.
Wann überspringen: Wenn Sie ein Anfänger sind, der from newsapi import …-Ergonomie wünscht – die psychologische Barriere, rohes requests zu schreiben, ist real, auch wenn der Code kaum länger ist.
3. Rohes requests → NewsData.io
Dasselbe Shape, anderer Anbieter. Eine separate Erwähnung wert, da das historische Archiv von NewsData.io (beworbene 8+ Jahre) für Arbeitsabläufe nützlich ist, bei denen die APITube-monatige Basisstufe von 12 nicht ausreicht.
import requests
response = requests.get(
"https://newsdata.io/api/1/latest",
params={
"apikey": "YOUR_NEWSDATA_KEY",
"q": "federal reserve",
"language": "en",
"size": 5,
},
timeout=10,
)
response.raise_for_status()
for article in response.json()["results"]:
print(article.get("title"), "-", article.get("source_id"))
Wann verwenden: Historische Nachrichtenrecherche, akademische Pipelines, Backtesting von Sentiment auf alten Artikeln. Das Kreditsystem von NewsData.io (im Gegensatz zu strikten Anfrageanzahlen) kann zu Ihren Gunsten wirken, wenn Sie vorsichtig sind.
Wann überspringen: Wenn Ihre Abfragrate sprunghaft oder komplex ist – die Kreditabrechnung ist schwieriger zu verstehen als reine Anfrageanzahlen. Lesen Sie deren aktuelle Preisübersicht, bevor Sie sich festlegen.
4. gnews — kostenlos, scrapt Google News RSS
Technisch gesehen keine Nachrichten-API im eigentlichen Sinne — gnews analysiert Google News RSS Feeds. Kein API-Schlüssel, kein bezahlter Plan, keine Nutzungsbedingungen zu lesen. Verwenden Sie für Prototypen und persönliche Tools; verwenden Sie es nicht für die Produktion hinter einem kostenpflichtigen Produkt.
from gnews import GNews
google_news = GNews(language="en", country="US", max_results=5)
articles = google_news.get_news("federal reserve")
for article in articles:
print(article["title"], "-", article["publisher"]["title"])
Wann zu verwenden: Prototypen ohne Budget, ein Wochenend-Hack, etwas, das in eine einzige Jupyter-Zelle passt.
Wann überspringen: Alles für die Produktion. Google kann seine RSS-Struktur oder Ratenlimits für Scraper ohne Vorwarnung ändern, und der Datensatz ist aggregiert-tiefverlinkt, nicht verlagsautoritativ.
5. asyncnewsapi — Nischen-Async-Wrapper
Asynchroner Fork der NewsAPI.org-Ergonomie. Nutzbar, aber ein Paket mit einem einzigen Maintainer und spärlichen Commits. Der kanonische Weg, asynchron mit einem Nachrichten-API-Wrapper in 2026 zu arbeiten, ist immer noch fraglich.
import asyncio
from asyncnewsapi import NewsApiClient
async def main():
async with NewsApiClient(api_key="YOUR_NEWSAPI_KEY") as client:
response = await client.everything(q="federal reserve", language="en", page_size=5)
for article in response["articles"]:
print(article["title"])
asyncio.run(main())
Wann zu verwenden: wenn Sie speziell NewsAPI.org verwenden und speziell asynchron arbeiten müssen und speziell die sechs Zeilen httpx.AsyncClient nicht selbst schreiben möchten.
Wann überspringen: Alles, was nicht auf NewsAPI.org ist, und fast immer – das generische httpx-Muster in #6 ist flexibler und hat eine breitere Community-Wartung.
6. httpx.AsyncClient — das generische Muster (empfohlen für die Produktion)
Wenn Sie asynchrones Python in 2026 schreiben, ist dies die Antwort für jede Nachrichten-API. Kein Vendor-Lock-in, weniger Abhängigkeiten als jeder Wrapper, funktioniert gegen NewsAPI.org, APITube, NewsData.io, Mediastack – alle.
import asyncio
import httpx
APIS = [
("apitube", "https://api.apitube.io/v1/news/everything",
{"X-API-Key": "YOUR_APITUBE_KEY"},
{"title": "federal reserve", "language.code": "en", "per_page": 5}),
("newsapi", "https://newsapi.org/v2/everything",
{},
{"apiKey": "YOUR_NEWSAPI_KEY", "q": "federal reserve", "language": "en", "pageSize": 5}),
("newsdata", "https://newsdata.io/api/1/latest",
{},
{"apikey": "YOUR_NEWSDATA_KEY", "q": "federal reserve", "language": "en", "size": 5}),
]
async def fetch(client, name, url, headers, params):
r = await client.get(url, headers=headers, params=params, timeout=10)
r.raise_for_status()
return name, r.json()
async def main():
async with httpx.AsyncClient() as client:
results = await asyncio.gather(
*(fetch(client, *api) for api in APIS)
)
for name, payload in results:
count = len(payload.get("results") or payload.get("articles") or [])
print(f"{name}: {count} articles")
asyncio.run(main())
Das sind drei Nachrichten-APIs, die parallel in 25 Zeilen abgefragt werden. asyncio.gather() führt die drei HTTP-Aufrufe gleichzeitig aus; die Gesamtverzögerung = das Maximum der drei, nicht die Summe. Fügen Sie eine semaphore hinzu, wenn Sie beginnen, auf 20+-Endpunkte zu verteilen.
Wann zu verwenden: Produktionsdienste, parallele Erfassung, alles, bei dem der Anfragedurchsatz wichtig ist. Wann zu überspringen: Jupyter-Notebook-Zellen, in denen Sie nur Daten erkunden.
Pandas-Pipeline: Antwort → normalisierter DataFrame
Jeder Anbieter gibt eine andere JSON-Form zurück. Der saubere Weg, mit mehreren APIs zu arbeiten, ist eine Normalisierungsschicht, die Anbieterfelder in ein Schema abbildet und dann Pandas eine flache Liste von Dictionaries übergibt.
import pandas as pd
def normalise(vendor, payload):
if vendor == "apitube":
return [{
"title": a["title"],
"url": a["href"],
"published_at": a["published_at"],
"source": a["source"]["domain"],
"sentiment": a["sentiment"]["overall"]["score"],
"vendor": vendor,
} for a in payload["results"]]
if vendor == "newsapi":
return [{
"title": a["title"],
"url": a["url"],
"published_at": a["publishedAt"],
"source": a["source"]["name"],
"sentiment": None,
"vendor": vendor,
} for a in payload["articles"]]
return []
# assume `results` from the async block above
rows = [row for name, payload in results for row in normalise(name, payload)]
df = pd.DataFrame(rows)
df["published_at"] = pd.to_datetime(df["published_at"])
print(df.groupby("vendor").size())
print(df.dropna(subset=["sentiment"])["sentiment"].describe())
Jetzt haben Sie einen einzigen DataFrame mit konsistenten Spalten über Anbieter hinweg, und Sie können df.groupby("source").sentiment.mean() durchführen, Zählungen über die Zeit plotten oder mit einer anderen Datenquelle verknüpfen. Dies ist der Ablauf, nach dem "Python-Nachrichtendatenanalyse"-Suchen tatsächlich suchen; fast kein bestehender Artikel zeigt dies Ende-zu-Ende.
Wiederholungs- und Ratenbegrenzungsbehandlung mit Tenacity
Jeder Produktionsaufrufer trifft irgendwann auf 429 und transiente 5xx. tenacity ist der Community-Standard-Decorator. Konfigurieren Sie ihn so, dass er 3 Mal mit exponentiellem Backoff wiederholt und nicht bei 4xx wiederholt, außer bei 429 – das Wiederholen von Authentifizierungs- oder Validierungsfehlern ist verschwendete Arbeit.
import requests
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
class Retryable(Exception):
pass
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=30),
retry=retry_if_exception_type(Retryable),
reraise=True,
)
def fetch(url, headers, params):
r = requests.get(url, headers=headers, params=params, timeout=10)
if r.status_code == 429 or r.status_code >= 500:
raise Retryable(f"transient {r.status_code}")
r.raise_for_status()
return r.json()
Dies funktioniert gegen jede Nachrichten-API. Bei Anbietern, die einen Retry-After-Header bei 429 zurückgeben, lesen und beachten Sie diesen (int(r.headers.get("Retry-After", "1"))) anstelle des exponentiellen Backoffs bei diesem spezifischen Wiederholungsversuch. Der Wrapper von NewsAPI.org bietet Ihnen diesen Hook nicht sauber, was ein weiterer Grund ist, warum requests + tenacity bei Produktionsskalierung einen dünnen Wrapper schlägt.
"Kein offizielles SDK" ist fast nie ein echter Nachteil
Die meisten Entwickler von Python bevorzugen instinktiv APIs mit einem Pip-Wrapper. In 2026 ist dieser Instinkt für Nachrichten-APIs umgekehrt:
- Wrapper hinken der API hinterher. Updates von Endpunkten, neue Parameter und Antwortfelder erscheinen monatelang in der Dokumentation, bevor sie in Community-gepflegten Wrappern landen. APITube, Mediastack und NewsData.io veröffentlichen vierteljährlich neue Filter – alle sofort über
requestsnutzbar. - Weniger Abhängigkeiten überstehen Audits. Sicherheits-, Lieferketten- und Lizenzprüfungsteams bevorzugen
requests(oderhttpx) gegenüber einem dünnen Wrapper, der ein zusätzliches Paket fixiert. - Debugging ist einfacher.
print(response.request.url)funktioniert. Wrapper-Internals tun es nicht immer.
Im Gegensatz zu Wrapper-abhängigen Bibliotheken, die jedes Mal kaputtgehen, wenn der API einen neuen Parameter hinzufügt, übergibt ein roher requests-Aufruf Parameter direkt durch – was bedeutet, dass Ihr Code die API-Entwicklung ohne einen PR vom Wrapper-Maintainer übersteht.
Häufig gestellte Fragen
Wie erhalte ich Nachrichten-Daten in Python?
Der einfachste Weg, Nachrichten-Daten in Python zu erhalten, ist die Installation von requests (pip install requests) und der direkte Aufruf einer Nachrichten-API – zum Beispiel requests.get("https://newsapi.org/v2/everything", params={"apiKey": key, "q": "python"}). Für mehrere parallele Anfragen verwenden Sie httpx.AsyncClient mit asyncio.gather(). Für kostenloses Google Nachrichten-Scraping installieren Sie das gnews-Paket.
Ist NewsAPI für Python-Entwickler kostenlos?
NewsAPI.org bietet einen kostenlosen Entwicklerplan mit 100 Anfragen/Tag und 1-Monats-Historie. Seine Bedingungen schließen die kommerzielle Nutzung aus. Für ein kostenpflichtiges Python-Produkt kostet der erste kommerzielle Plan $449/Monat. Andere Optionen sind der Basic-Plan von APITube ($99/Monat) und gnews, das RSS liest, anstatt eine bezahlte API zu verwenden.
Was ist die beste asynchrone Nachrichten-API-Bibliothek für Python?
Der beste asynchrone Ansatz für Nachrichten-APIs in Python ist httpx.AsyncClient mit asyncio.gather(), da er gegen jeden Anbieter (NewsAPI.org, APITube, NewsData.io, Mediastack) ohne anbieterspezifischen Wrapper funktioniert. Das asyncnewsapi-Paket ist eine Option, wenn Sie sich für NewsAPI.org entschieden haben, aber es ist ein Fork mit einem einzigen Maintainer, spärlichen Commits und keiner Multi-Anbieter-Unterstützung.
Wie extrahiere ich Nachrichtenartikel mit Python?
Um Nachrichtenartikel mit Python zu scrapen, ohne eine bezahlte API zu treffen, verwenden Sie das gnews-Paket (pip install gnews), das Google News RSS umschließt, oder newspaper3k für die Extraktion des vollständigen Textes aus beliebigen Artikel-URLs. Das direkte Scrapen von Verlagsseiten verstößt wahrscheinlich gegen deren Nutzungsbedingungen. Bevorzugen Sie daher für kommerzielle Anwendungen eine Nachrichten-API (NewsAPI.org, APITube, NewsData.io) – die Kosten sind normalerweise niedriger als das rechtliche Risiko.
Hat APITube ein Python SDK?
APITube veröffentlicht keine offizielle Python SDK (Stand: April 2026). Der empfohlene Python-Ansatz ist die Standard-requests-Bibliothek (synchron) oder httpx.AsyncClient (asynchron). Ein 8-zeiliger requests.get()-Aufruf gegen https://api.apitube.io/v1/news/everything mit dem X-API-Key-Header liefert die vollständige Antwort einschließlich Sentiment, Entitäten und Artikeltext – das sind weniger Zeilen als beim Importieren und Konfigurieren der meisten Wrapper.
Urteil
Die richtige Antwort auf „beste Nachrichten-API für Python“ in 2026 ist fast nie eine einzelne Wahl – es ist ein Paar: Ansatz + Anbieter. Für synchrone Notebooks verwenden Sie newsapi-python, wenn Sie NewsAPI.org verwenden, andernfalls rohes requests. Für asynchrone Produktionspipelines verwenden Sie httpx.AsyncClient mit asyncio.gather() gegen den Anbieter, der Ihren Datenanforderungen entspricht. Für Pandas-Analysen normalisieren Sie Felder frühzeitig. Für Produktionszuverlässigkeit umschließen Sie Aufrufe in tenacity.
Holen Sie sich einen API-Schlüssel von einem der oben genannten Anbieter und führen Sie die Code-Snippets aus – die Bibliothek ist weniger wichtig als das Muster. Testen Sie APITube kostenlos → apitube.io – die kostenlose Stufe umfasst 100 Anfragen pro Tag, genug, um den requests-Snippet oben einzufügen und die vollständige Antwortform (Sentiment, Entitäten, Text) zu sehen, bevor Sie sich festlegen.
Ressourcen
- APITube — apitube.io — kostenlos testen, Sentiment und Entitäten in jedem Artikel enthalten
- Dokumentation — docs.apitube.io — Endpunkte, Parameter, Antwortstruktur, Integrationen
- Preise – apitube.io/pricing – alle Stufen
- APITube Blog — apitube.io/blog — weitere Leitfäden und Vergleiche
Verwandte Anleitungen:
- Nachrichten-Sentiment-Analyse in Python (VADER vs FinBERT)
- Telegramm-Nachrichten-Bot in Python (aiogram 3)
- Beste Nachrichten API für Sentiment & NLP 2026

