Bedste nyheder API Python 2026: 6-muligheder med kode

Erick Horn

Erick Horn

·

20 mins Læs

Bedste nyheder API Python 2026: 6-muligheder med kode

Bedste nyheder API til Python-udviklere i 2026

De fleste Python artikler om nyheds-API'er låser dig fast til NewsAPI.org, fordi det er den eneste udbyder med en pip-wrapper, der bliver opdateret. Den bedste nyheds-API til Python i 2026 afhænger af, hvad du bygger: en prototype, en asynkron pipeline, en pandas analyse-notebook eller en produktionsservice med genforsøg. Nedenfor er seks muligheder rangeret, hver med kørbar kode, plus tre kodemønstre, som enhver Python nyhedspipeline har brug for (asynkron, pandas, genforsøg).

Denne artikel er til Python-udviklere (mellemniveau+) der vælger et bibliotek og API til et reelt projekt. Alle uddrag målretter Python 3.11+.

Oplysning

APITube er mit projekt. Det er rangeret nedenfor sammen med alle andre leverandører og vises i "native requests"-niveauet, fordi det ikke leverer en officiel Python SDK.

TL;DR

#ValgmulighedIndpakkerAsync?Gratis tier kommerciel?Installer
1newsapi-pythonNewsAPI.orgNejNejpip install newsapi-python
2Rå requests → APITubeAPITubeNej (brug httpx)Kun til udviklerepip install requests
3Rå requests → NewsData.ioNewsData.ioNejKun til udviklerepip install requests
4gnewsGoogle Nyheder RSSNejN/A (scraper)pip install gnews
5asyncnewsapiNewsAPI.orgJaNejpip install asyncnewsapi
6httpx.AsyncClient (generisk)AlleJaAfhænger afpip install httpx

Vælg efter scenarie: prototype med gratis overskrifter: #4. Produktionsfeed med NLP: #2. Historisk forskning: #3. Asynkron pipeline på tværs af flere leverandører: #6. Sidder fast på mainstream-wrapperen: #1.

1. newsapi-python — standard wrapperen

Den mest populære PyPI-nyhedspakke API med stor margin. Officiel-ish (fællesskab-vedligeholdt, godkendt af NewsAPI.org-dokumentation). Kun synkronisering, men API er ren.

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"])

Hvornår skal det bruges: engangs-scripts, tutorials, notebooks, alt synkront. Wrapperen reducerer boilerplate med måske 3 linjer vs. rå requests.

Hvornår man skal springe over: asynkrone arbejdsbyrder (ingen coroutine-understøttelse), hvis du har brug for artikeltekster (NewsAPI.org returnerer dem ikke på noget niveau), eller hvis du er på et budget — den første kommercielle plan er $449/måned.

2. Rå requests → APITube

APITube har ingen officiel Python SDK. Til 95%-brugsscenarier behøver du ikke en — 10 linjer med requests klarer opgaven og returnerer rigere data (sentiment, entiteter, fuld tekst) end de indpakkede alternativer ovenfor.

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}")

Hvornår skal man bruge: enhver pipeline, der har brug for sentiment, entiteter eller fuld artikelbrødtekst ud af boksen; produktionsservices, hvor du hellere ikke vil afhænge af en tredjeparts wrapper; overalt, hvor du bekymrer dig om 12+ måneders historik.

Hvornår skal man springe over: hvis du er en nybegynder, der ønsker from newsapi import … ergonomi — den psykologiske barriere for at skrive rå requests er reel, selvom koden knap er længere.

3. Rå requests → NewsData.io

Samme form, anden leverandør. Værd at have en separat post, fordi NewsData.io's historiske arkiv (annoncerede 8+ år) er nyttigt til forskningsworkflows, hvor APITube's 12-måneders Grundlæggende-plan ikke er nok.

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"))

Hvornår skal man bruge: historisk nyhedsforskning, akademiske pipelines, back-testing af sentiment på gamle artikler. NewsData.io's kreditsystem (vs strenge forespørgselsantal) kan arbejde til din fordel, hvis du er forsigtig.

Hvornår skal man springe over: hvis din forespørgselsrate er spids eller kompleks — kreditregnskabet er sværere at ræsonnere om end rene forespørgselsantal. Læs deres nuværende planer-side, før du forpligter dig.

4. gnews — gratis, scraper Google News RSS

Teknisk set ikke en nyheds-API i streng forstand — gnews parser Google News RSS feeds. Ingen API nøgle, ingen betalt plan, ingen servicevilkår at læse. Brug til prototyper og personlige værktøjer; brug ikke til produktion bag et betalt 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"])

Hvornår skal det bruges: prototype med nul budget, et weekend-hack, noget der passer ind i en enkelt Jupyter-celle.

Hvornår skal man springe over: alt til produktion. Google kan ændre deres RSS-struktur eller rate-limit scrapere uden varsel, og datasættet er aggregator-deep-linked, ikke udgiver-autoritativt.

5. asyncnewsapi — niche asynkron wrapper

Async-version af NewsAPI.org-ergonomien. Brugbar, men en pakke med én vedligeholder med sparsomme commits. Den kanoniske måde at gøre async med en nyheds-API-wrapper i 2026 er stadig et spørgsmålstegn.

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())

Hvornår skal det bruges: hvis du specifikt bruger NewsAPI.org og specifikt har brug for async og specifikt ikke ønsker at skrive de seks linjer med httpx.AsyncClient selv.

Hvornår skal man springe over: alt, der ikke er på NewsAPI.org, og næsten altid — det generiske httpx-mønster i #6 er mere fleksibelt og har bredere community-vedligeholdelse.

6. httpx.AsyncClient — det generiske mønster (anbefalet til produktion)

Hvis du skriver async Python i 2026, er dette svaret for enhver nyheds-API. Ingen leverandør-lock, færre afhængigheder end nogen wrapper, virker mod NewsAPI.org, APITube, NewsData.io, Mediastack — alle af dem.

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())

Det er tre nyheds-API'er forespurgt parallelt i 25 linjer. asyncio.gather() kører de tre HTTP kald samtidigt; samlet latenstid = maksimum af de tre, ikke summen. Tilføj en semaphore, hvis du begynder at vifte ud til 20+ endpoints.

Hvornår skal det bruges: produktions-services, parallel ingestion, alt hvor request throughput betyder noget. Hvornår skal det springes over: Jupyter notebook-celler, hvor du blot udforsker data.

Pandas pipeline: svar → normaliseret DataFrame

Hver leverandør returnerer en forskellig JSON form. Den rene måde at arbejde med flere API'er på er et normaliseringslag, der mapper leverandørfelter til ét skema, og derefter giver pandas en flad liste af dictionaries.

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())

Nu har du en enkelt DataFrame med konsistente kolonner på tværs af leverandører, og du kan lave df.groupby("source").sentiment.mean(), plotte antal over tid eller joine med en anden datakilde. Dette er det flow, som "python news data analysis"-søgninger faktisk leder efter; næsten ingen eksisterende artikler viser det ende til ende.

Retry og rate-limit håndtering med tenacity

Enhver produktionsopkalder rammer 429 og transient 5xx til sidst. tenacity er community-standarden decorator. Konfigurer den til at forsøge igen 3 gange med eksponentiel backoff og ikke at forsøge igen på 4xx undtagen 429 — at forsøge igen på auth- eller valideringsfejl er spildt arbejde.

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()

Dette virker mod enhver nyheds-API. For leverandører, der returnerer en Retry-After header på 429, skal du læse og respektere den (int(r.headers.get("Retry-After", "1"))) i stedet for den eksponentielle backoff på den specifikke genforsøg. NewsAPI.org's wrapper giver dig ikke denne krog rent, hvilket er endnu en grund til, at requests + tenacity slår en tynd wrapper i produktionsskala.

"Ingen officiel SDK" er næsten aldrig en rigtig ulempe

De fleste Python-udviklere foretrækker instinktivt API'er med en pip-wrapper. I 2026 er det instinkt bagvendt for nyheds-API'er:

  • Wrappers halter efter API. Opdateringer til endpoints, nye parametre og svarfelter ankommer i dokumentationen måneder før de lander i community-vedligeholdte wrappers. APITube, Mediastack og NewsData.io udgiver nye filtre kvartalsvis — alt sammen umiddelbart brugbart via requests.
  • Færre afhængigheder overlever revisioner. Sikkerheds-, forsyningskæde- og licensgennemgangsteams foretrækker requests (eller httpx) frem for en tynd wrapper, der fastlåser en ekstra pakke.
  • Fejlfinding er enklere. print(response.request.url) virker. Wrapper-internals gør det ikke altid.

I modsætning til wrapper-afhængige biblioteker, der går i stykker, hver gang API tilføjer en ny parameter, passerer et råt requests-kald parametre direkte igennem — hvilket betyder, at din kode overlever API-udvikling uden en PR fra wrapper-vedligeholderen.

Ofte stillede spørgsmål

Hvordan får jeg nyhedsdata i Python?

Den enkleste måde at få nyhedsdata i Python er at installere requests (pip install requests) og kalde en nyheds-API direkte – for eksempel requests.get("https://newsapi.org/v2/everything", params={"apiKey": key, "q": "python"}). For flere parallelle anmodninger, brug httpx.AsyncClient med asyncio.gather(). For gratis Google nyhedsskrabning, installer gnews-pakken.

Er NewsAPI gratis for Python udviklere?

NewsAPI.org tilbyder en gratis Udvikler-plan med 100 anmodninger/dag og 1-måneders historik. Dens vilkår udelukker kommerciel brug. For et betalt Python produkt koster den første kommercielle plan $449/måned. Andre muligheder inkluderer APITube's Grundlæggende plan ($99/måned) og gnews, som læser RSS i stedet for at bruge en betalt API.

Hvad er det bedste asynkrone nyheds-API-bibliotek til Python?

Den bedste asynkrone tilgang til nyheds-API'er i Python er httpx.AsyncClient med asyncio.gather(), fordi den fungerer mod enhver leverandør (NewsAPI.org, APITube, NewsData.io, Mediastack) uden en leverandørspecifik wrapper. asyncnewsapi-pakken er en mulighed, hvis du er forpligtet til NewsAPI.org, men det er en enkelt-vedligeholder fork med sparsomme commits og ingen multi-leverandør support.

Hvordan scraper jeg nyhedsartikler med Python?

For at scrape nyhedsartikler med Python uden at ramme et betalt API, brug gnews-pakken (pip install gnews), der wrapper Google News RSS, eller newspaper3k til fuldtekstekstraktion fra vilkårlige artikel-URL'er. Scraping af udgiveres websteder direkte risikerer at overtræde deres servicevilkår, så foretræk en nyheds-API (NewsAPI.org, APITube, NewsData.io) til kommercielle applikationer — omkostningen er normalt lavere end den juridiske risiko.

Har APITube en Python SDK?

APITube udgiver ikke en officiel Python SDK pr. april 2026. Den anbefalede Python-tilgang er det standard requests-bibliotek (synkron) eller httpx.AsyncClient (asynkron). Et 8-linjers requests.get()-kald mod https://api.apitube.io/v1/news/everything med X-API-Key-headeren returnerer hele svaret, inklusive sentiment, entiteter og artikeltekst — hvilket er færre linjer end at importere og konfigurere de fleste wrappers.

Dom

Det rigtige svar på "bedste nyheds-API til Python" i 2026 er næsten aldrig et enkelt valg – det er et par: tilgang + leverandør. Til synkroniserings-notebooks, brug newsapi-python hvis du er på NewsAPI.org, ellers rå requests. Til asynkron produktions-pipelines, brug httpx.AsyncClient med asyncio.gather() mod den leverandør, der passer til dine data-behov. Til pandas-analyse, normaliser felter tidligt. Til produktionspålidelighed, pak kald ind i tenacity.

Få en API nøgle fra en af ovenstående leverandører og kør kodestykkerne — biblioteket betyder mindre end mønsteret. Prøv APITube gratis → apitube.io — den gratis tier er 100 anmodninger pr. dag, nok til at indsætte requests-kodestykket ovenfor og se hele svarsformen (sentiment, entiteter, brødtekst), før du forpligter dig.

Ressourcer

  • APITube — apitube.io — prøv det gratis, sentiment og entiteter inkluderet på hver artikel
  • Dokumentation — docs.apitube.io — endpoints, parametre, svarsstruktur, integrationer
  • Prissætning — apitube.io/pricing — alle niveauer
  • APITube blog — apitube.io/blog — flere guides og sammenligninger

Relaterede vejledninger:

APITube - News API

Relaterede artikler

NewsCatcher API Alternativ 2026: Ærlig Sammenligning
Insights

NewsCatcher API Alternativ 2026: Ærlig Sammenligning

Sammenlign NewsCatcher vs APITube med reel kode, JSON svar, $/artikel matematik ved 3 volumener, og hvornår man skal blive hos NewsCatcher. For udviklere.

Google Nyheder API Alternativer: 5 Scoret på Docs (2026)
Insights

Google Nyheder API Alternativer: 5 Scoret på Docs (2026)

Fem Google News API alternativer scores på en 7-kriterie dokumentationsrubrik. Afskrivningsfakta, tid-til-første--200 benchmark, fungerende kode. 2026 udgave.

Gratis nyheds-API begrænsninger 2026: 6 tiers testet
Insights

Gratis nyheds-API begrænsninger 2026: 6 tiers testet

Gratis nyheds-API'er koster mere end betalte planer. Vi testede 6 tiers: reelle rate-begrænsninger, manglende felter, kommercielle begrænsninger. Beslutningsramme indeni.

Nyheder API Ratebegrænsninger 2026: Hvem giver flest anmodninger
Insights

Nyheder API Ratebegrænsninger 2026: Hvem giver flest anmodninger

Nyheder API ratebegrænsningssammenligning 2026: leverandøroverskridende tabel med rpm, daglige/månedlige loft, artikler/anmodning, effektiv gennemstrømning og throttle-adfærd.

Vi bruger cookies

Ved at klikke på "Accepter" accepterer du cookies på din enhed, så webstedet fungerer og til analyse.