Dieses Repository bietet zwei Methoden, um Nachrichtendaten aus Google News zu sammeln.
- Kostenlose Methode: Perfekt für kleine Projekte und zum Lernen
- Google News API: Ideal für groß angelegte, zuverlässige Datenextraktion in Echtzeit
Dieses kostenlose Tool ermöglicht es Ihnen, Nachrichtenartikel basierend auf jedem Thema zu sammeln, das Sie interessiert. Sie erhalten alles von Überschriften bis zu Veröffentlichungsdaten – alles sauber organisiert.
- Python 3.9+
- Zwei zentrale Packages:
- aiohttp (zum Senden von Anfragen)
- beautifulsoup4 (zum Parsen von HTML)
-
Klonen Sie das Repository:
git clone https://github.com/bright-data-de/Google-News-Scraper.git
-
Wechseln Sie in das Projektverzeichnis:
cd Google-News-Scraper -
Installieren Sie die erforderlichen Abhängigkeiten:
pip install -r requirements.txt
-
Wechseln Sie in das Verzeichnis
free_scraperund öffnen Siemain.py -
Definieren Sie Ihre Suchbegriffe in der Datei:
search_terms = [ "artificial intelligence", "climate change", "space exploration", # Add more search terms as needed ] -
Führen Sie den Scraper aus:
python main.py
Der Scraper generiert JSON-Dateien:
- Einzelne JSON-Dateien für jeden Suchbegriff
- Eine Datei
combined_results.json, die Daten aus allen Suchbegriffen enthält
Jeder Artikel in der JSON-Ausgabe enthält:
{
"title": "OpenAI launches full o1 model with image uploads and analysis, debuts ChatGPT Pro - VentureBeat",
"link": "https://news.google.com/rss/articles/CBMipgFBVV95cUxQTTVmS1I4aW1QanZXTnBfa2tBR3d0Y2JzNjJJNldBZTd1TVVfRmpxaUM3bGJld3RycXhPbU8wM1loT0JGd2JDRzFmU1pLU3FSbkRRZ0FPY29INmdhU1RsWXFqXzdLTjNCbU5ES3pIQXZLbTVmMWVhc0FqVlljeWNPOHZMeFlXV2F5Q21ac0lSZVhIOHlnS05sdkR5ZjhJTU9HazJ6MWJR?oc=5",
"publication_date": "Thu, 05 Dec 2024 18:00:00 GMT",
"source": "VentureBeat",
"source_url": "https://venturebeat.com",
"guid": "CBMipgFBVV95cUxQTTVmS1I4aW1QanZXTnBfa2tBR3d0Y2JzNjJJNldBZTd1TVVfRmpxaUM3bGJld3RycXhPbU8wM1loT0JGd2JDRzFmU1pLU3FSbkRRZ0FPY29INmdhU1RsWXFqXzdLTjNCbU5ES3pIQXZLbTVmMWVhc0FqVlljeWNPOHZMeFlXV2F5Q21ac0lSZVhIOHlnS05sdkR5ZjhJTU9HazJ6MWJR",
}👉 Sie finden eine vollständige Beispielausgabe in unserem Verzeichnis free_scraper/data/.
Das Scraping von Daten aus Google News kann ziemlich herausfordernd sein. Hier sind einige häufige Probleme, auf die Sie stoßen können:
- CAPTCHA und Anti-Bot-Mechanismen: Google verwendet häufig CAPTCHAs oder Mechanismen zur Ratenbegrenzung, um Bots am Zugriff auf Inhalte zu hindern.
- Skalierbarkeit: Das Scraping großer Datenmengen oder Scraping mit hoher Frequenz kann kostenlose Scraper überfordern.
- Globaler und lokalisierter Zugriff auf Nachrichten: Das Anpassen von Scrapern für verschiedene Regionen und Sprachen erfordert häufig erheblichen Aufwand und manuelle Anpassungen.
Möchten Sie etwas Robusteres? Dann sprechen wir über Bright Data's Google News API. Hier ist der Grund, warum sie es wert ist:
- Keine Infrastruktur-Kopfschmerzen: Vergessen Sie Proxies und CAPTCHAs
- Für Skalierung entwickelt: Bewältigt hohen Traffic mit außergewöhnlicher Performance
- Globale Reichweite: Holen Sie News aus jedem Land, in jeder Sprache
- Datenschutz zuerst: GDPR- & CCPA-konform
- Bezahlen nach Erfolg: Es werden nur erfolgreiche Anfragen berechnet
- Testen vor dem Kauf: 20 kostenlose API-Aufrufe, um alles auszuprobieren
Eine ausführliche Anleitung zum Einrichten der Google News API finden Sie in unserer Step-by-Step Setup Guide.
| Parameter | Required? | Description | Example |
|---|---|---|---|
url |
Yes | Basis-Google-News-URL | news.google.com |
keyword |
Yes | Ihr Suchthema | "ChatGPT" |
country |
No | Woher die News bezogen werden sollen | "US" |
language |
No | Welche Sprache Sie möchten | "en" |
So sieht die API-Antwort aus:
{
"url": "https://www.tomsguide.com/news/live/12-days-of-openai-live-blog-chatgpt-sora",
"title": "12 Days of OpenAI Day 2 LIVE: o1 full is here and every new ChatGPT AI announcement as it happens",
"publisher": "Tom's Guide",
"date": "2024-12-06T20:54:01.000Z",
"category": null,
"keyword": "chatgpt",
"country": "US",
"image": "https://news.google.com/api/attachments/CC8iK0NnNW9SbTFVTWtkNGFGSjJSVGhGVFJDb0FSaXNBaWdCTWdhQmtJcWpOQWM=-w200-h112-p-df-rw",
"timestamp": "2024-12-08T10:06:05.122Z",
"input": {
"url": "https://news.google.com/",
"keyword": "chatgpt",
"country": "US",
"language": "en",
},
}👉 Sie finden eine vollständige Beispielausgabe in unserer Datei news_scraper_output.json.
Hier ist ein Script, mit dem Sie starten können:
import requests
import json
import time
class BrightDataNews:
def __init__(self, api_token):
self.api_token = api_token
self.headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json",
}
self.dataset_id = "gd_lnsxoxzi1omrwnka5r"
def collect_news(self, search_queries):
"""
Collect Google News articles using BrightData API
"""
# 1. Trigger data collection
print("Starting news collection...")
trigger_response = self._trigger_collection(search_queries)
snapshot_id = trigger_response.get("snapshot_id")
print(f"Snapshot ID: {snapshot_id}")
# 2. Wait for data to be ready
print("Waiting for data...")
while True:
status = self._check_status(snapshot_id)
print(f"Status: {status}")
if status == "ready":
# Check if data is actually available
data = self._get_data(snapshot_id)
if data and len(data) > 0:
break
time.sleep(10) # Wait 10 seconds before next check
# 3. Get and save the data
print("Saving data...")
filename = f"news_scraper_output.json"
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print(f"✓ Data saved to {filename}")
print(f"✓ Collected {len(data)} news articles")
return data
def _trigger_collection(self, search_queries):
"""Trigger news data collection"""
response = requests.post(
"https://api.brightdata.com/datasets/v3/trigger",
headers=self.headers,
params={"dataset_id": self.dataset_id, "include_errors": "true"},
json=search_queries,
)
return response.json()
def _check_status(self, snapshot_id):
"""Check collection status"""
response = requests.get(
f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
headers=self.headers,
)
return response.json().get("status")
def _get_data(self, snapshot_id):
"""Get collected data"""
response = requests.get(
f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}",
headers=self.headers,
params={"format": "json"},
)
return response.json()So verwenden Sie es:
# Initialize the client
news_client = BrightDataNews("<YOUR_API_TOKEN>")
# Define what you want to collect
queries = [
{
"url": "https://news.google.com/",
"keyword": "artificial intelligence startups",
"country": "US",
"language": "en",
},
{
"url": "https://news.google.com/",
"keyword": "tech industry layoffs",
"country": "US",
"language": "en",
},
]
# Start collection
try:
news_data = news_client.collect_news(queries)
print(f"Successfully collected {len(news_data)} articles")
except Exception as e:
print(f"Collection failed: {str(e)}")- Einrichten Ihres API Token
- Als Erstes benötigen Sie ein API Token
- Falls Sie noch keines haben, sehen Sie sich unseren setup guide an
- Starten der Sammlung
- Übergeben Sie Ihre Such-Parameter an die API
- Sie erhalten eine
snapshot_idzurück
- Fortschritt überwachen
- Der Prozess dauert ein paar Minuten
- Unser Code prüft den Status automatisch:
- "running" = Ihre Daten werden noch gesammelt
- "ready" = Zeit, Ihre Ergebnisse abzurufen!
- Abrufen Ihrer Daten
- Sobald der Status "ready" anzeigt, rufen wir Ihre Ergebnisse ab und speichern sie
- Die Daten kommen in einem sauberen JSON-Format
- Jeder Artikel enthält alle Felder, die wir zuvor besprochen haben
Sie können die folgenden Parameter verwenden, um Ihre Ergebnisse feinzujustieren:
| Parameter | Type | Description | Example |
|---|---|---|---|
limit |
integer |
Maximale Ergebnisse pro Input | limit=10 |
include_errors |
boolean |
Fehlerberichte zur Fehlersuche abrufen | include_errors=true |
notify |
url |
Webhook-Benachrichtigungs-URL, um bei Abschluss benachrichtigt zu werden | notify=https://notify-me.com/ |
format |
enum |
Ausgabeformat (z. B. JSON, NDJSON, JSONL, CSV) | format=json |
💡 Pro Tip: Sie können außerdem auswählen, ob die Daten an einen external storage geliefert werden sollen oder ob sie an einen webhook geliefert werden sollen.
Benötigen Sie weitere Details? Sehen Sie sich die official API docs an.
