Google News aggregiert Schlagzeilen von Tausenden von Verlagen in einem ständig aktualisierten Feed. Das macht es zu einer attraktiven Quelle, wenn Sie ein Thema verfolgen, die Verbreitung einer Geschichte beobachten oder einen Datensatz aufbauen möchten, wer wann was berichtet hat. Der Haken ist: Die Seite ist für Browser, nicht für Skripte gebaut. Sie wird clientseitig gerendert und stellt automatisierten Traffic vor Herausforderungen, sodass eine einfache HTTP-Anfrage statt der gesuchten Schlagzeilen nur eine nahezu leere Hülle liefert.
Dieser Leitfaden zeigt Ihnen, wie Sie Google News mit JavaScript scrapen. Sie bauen ein kleines, ausführbares Node-Skript, das die gerenderte Seite über den Crawlbase Smart AI Proxy abruft, dann Schlagzeilen, Verlage, Veröffentlichungszeiten und Autoren mit Cheerio parst und als JSON ausgibt. Alles hier bezieht sich auf öffentliche Ergebnisse, die jeder ohne Anmeldung sehen kann. Den Abschnitt zur Rechtslage am Ende lohnt es sich zu lesen, bevor Sie dies in größerem Umfang einsetzen.
Warum Google News scrapen
Ein einzelner Besuch bei Google News zeigt Ihnen, wie der Feed zu einem bestimmten Zeitpunkt aussieht. Der Wert des Scrapings besteht darin, diesen sich bewegenden Strom in strukturierte Zeilen umzuwandeln, die Sie speichern, abfragen und über die Zeit vergleichen können. Einige konkrete Anwendungsfälle:
- Trend- und Themenverfolgung. Beobachten Sie, welche Geschichten für eine Suchanfrage auftauchen und wie sich die Berichterstattung im Laufe des Tages verschiebt. Nützlich für Recherche, Journalismus und SEO-Planung.
- Wettbewerbs- und Markenmonitoring. Erfassen Sie Erwähnungen eines Unternehmens, Produkts oder einer Führungskraft aus vielen Quellen in einem Durchgang, anstatt Seiten manuell zu prüfen.
- Markt- und Finanzsignale. Aggregieren Sie Schlagzeilen rund um einen Sektor oder ein Ticker-Symbol für ein Dashboard oder ein Modell.
- Content-Kuration. Ziehen Sie frische, relevante Schlagzeilen in einen Newsletter oder einen internen Feed, ohne manuell Quellen zu durchsuchen.
In jedem Fall hat die Ausgabe dieselbe Form: Titel, Quelle, Zeitstempel, Link und Autorenzeilen, mit denen Sie etwas Sinnvolles anfangen können. Das sind die Daten, die dieser Scraper liefert.
Welche Daten Sie extrahieren können
Bevor Sie einen Selektor schreiben, hilft es zu wissen, welche Felder auf einer Google News-Ergebnisseite vorhanden und es wert sind, extrahiert zu werden. Jede Artikelkarte im Feed bietet einen vorhersehbaren Satz von Werten:
- Schlagzeile. Der Artikeltitel, wie er im Feed erscheint.
- Verleger. Die Quellenzeitung, die die Geschichte veröffentlicht hat (CNN, The Hill usw.).
- Veröffentlichungszeit. Ein relativer Zeitstempel wie "vor 21 Minuten" oder "vor 9 Stunden".
- Autor. Die Autorenzeile, wenn die Karte eine aufweist. Viele Karten haben keine, erwarten Sie also leere Felder.
- Artikellink. Das href auf der Schlagzeile, das auf die Originalveröffentlichung verweist.
Dieser Satz deckt die meisten Monitoring- und Rechercheanforderungen ab. Im folgenden Code extrahieren wir Schlagzeile, Verleger, Zeit und Autor. Das Herausziehen des Links ist eine einzeilige Ergänzung, sobald Sie die Karte zur Hand haben.
Warum eine einfache Anfrage hier scheitert
Wenn Sie eine Google News-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie eine 200-Antwort, deren Body größtenteils ein leerer Rahmen ist. Zwei Dinge arbeiten gegen Sie. Erstens rendert der Feed im Browser: Das anfängliche HTML ist eine Hülle, die sich erst füllt, nachdem das JavaScript der Seite ausgeführt wurde. Zweitens kennzeichnet Google automatisierten Traffic schnell, sodass Rechenzentrum-IPs und Anfragemuster, die nicht wie echte Browser aussehen, gedrosselt oder herausgefordert werden, bevor sie jemals den gerenderten Inhalt erreichen.
Ein funktionierender Google News-Scraper braucht also zwei Dinge gleichzeitig: etwas, das die Seite wie ein echter Browser rendert, und eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser plus einem Pool von rotierenden IP-Adressen aufbauen, aber diesen Stack zusammenzustellen und am Laufen zu halten, ist der Großteil des Aufwands. Der Crawlbase Smart AI Proxy faltet beides in einen einzigen Endpunkt: Richten Sie Ihren normalen HTTP-Client darauf aus, und er leitet die Anfrage über rotierende Wohn- und Rechenzentrum-IPs weiter und gibt Ihnen die Seite zum Parsen zurück.
Der Smart AI Proxy ist ein Drop-in-Proxy-Endpunkt: Sie behalten Ihren vorhandenen HTTP-Client und ändern nur, wohin er sich verbindet. Intern leitet er an die Crawling API weiter, sodass Sie dasselbe Rendering und dieselbe IP-Rotation erhalten. Wenn Sie lieber eine API direkt aufrufen und Optionen wie das JavaScript-Rendering explizit übergeben möchten, verwenden Sie stattdessen die Crawling API. Dieser Leitfaden nimmt den Proxy-Weg, weil er die kleinste Änderung an einer normalen Anfrage darstellt.
Voraussetzungen
Sie benötigen drei Dinge, bevor Sie Code schreiben:
-
Node.js installiert. Node führt JavaScript außerhalb des Browsers aus und gibt Ihnen npm zum Einbinden von Bibliotheken. Bestätigen Sie dies mit
node --version. - Grundlegendes JavaScript. Kenntnisse in Variablen, Funktionen und asynchronen Aufrufen reichen aus, um zu folgen.
- Ein Crawlbase-Token. Registrieren Sie sich für ein kostenloses Konto, öffnen Sie das Smart AI Proxy-Dashboard und kopieren Sie das Zugriffstoken aus den Verbindungsdetails. Dieses Token fungiert als Ihr Proxy-Benutzername und wird direkt in die Anfrage eingefügt.
Das Projekt einrichten
Erstellen Sie einen Projektordner, initialisieren Sie ihn und installieren Sie die zwei Bibliotheken, die der Scraper benötigt.
node --version mkdir google-news-scraper && cd google-news-scraper npm init -y npm install axios cheerio
Zwei Abhängigkeiten erledigen die Arbeit: axios stellt die HTTP-Anfrage und lässt sich leicht auf einen Proxy richten, und cheerio parst das zurückgegebene HTML mit einer jQuery-ähnlichen API auf dem Server. Nodes eingebaute https- und fs-Module decken den Proxy-Agent und das Schreiben von Dateien ab, sodass nichts weiteres zu installieren ist.
Die gerenderte Seite über den Smart AI Proxy abrufen
Der erste Schritt besteht darin, das fertige HTML zu erhalten. Sie konfigurieren einen HTTPS-Agent, der auf den Smart AI Proxy-Host und -Port zeigt, übergeben Ihr Token als Proxy-Benutzernamen und lassen axios die Anfrage darüber senden. Der Proxy rendert die Seite und gibt echtes Markup zurück, anstatt der leeren Hülle, die ein direkter Abruf liefert. Ersetzen Sie YOUR_CRAWLBASE_TOKEN durch das Token aus Ihrem Dashboard.
const axios = require('axios') const https = require('https') const fs = require('fs') const token = 'YOUR_CRAWLBASE_TOKEN' const url = 'https://news.google.com/home?hl=en-US&gl=US&ceid=US%3Aen' const agent = new https.Agent({ proxy: { host: 'smartproxy.crawlbase.com', port: 8012, auth: { username: token }, }, rejectUnauthorized: false, }) async function fetchGoogleNews(target) { const response = await axios.get(target, { httpsAgent: agent }) fs.writeFileSync('response.html', response.data) console.log('Status:', response.status, '- saved response.html') return response.data } fetchGoogleNews(url).catch((err) => console.error('Fetch failed:', err.message))
Einige Details erledigen hier echte Arbeit. Der Agent leitet jede Anfrage über smartproxy.crawlbase.com an Port 8012 weiter, Ihr Token wird als Proxy-Benutzername mitgeliefert, und rejectUnauthorized: false ermöglicht es dem Proxy, TLS ohne Zertifikatfehler zu beenden. Das Speichern des Body in response.html bedeutet, dass Sie einmal abrufen und Selektoren gegen die lokale Datei iterieren können, anstatt bei jeder Änderung eine Anfrage zu verbrauchen.
Führen Sie es mit node scraper.js aus. Sie sollten einen 200-Status und eine response.html sehen, die echtes Artikel-Markup enthält, kein leeres Gerüst. Das bestätigt, dass Rendering und Routing funktionieren, bevor Sie einen einzigen Selektor schreiben.
Google News benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, und der Smart AI Proxy liefert beides, ohne dass Sie die Art und Weise ändern müssen, wie Ihr Code Anfragen stellt. Richten Sie Ihren vorhandenen HTTP-Client auf den Proxy-Endpunkt, und er rotiert durch Wohn- und Rechenzentrum-IPs, rendert die Seite und gibt fertiges HTML zurück. So müssen Sie weder eine Headless-Flotte noch einen Proxy-Pool selbst betreiben. Starten Sie mit dem kostenlosen Tarif für öffentliche Feeds.
Ergebnisse mit Cheerio parsen
Mit dem gespeicherten HTML laden Sie es in Cheerio und durchlaufen die Artikelkarten. Jede Karte enthält die gewünschten Felder, sodass es darum geht, Schlagzeile, Verleger, Zeit und Autor dem richtigen Selektor innerhalb der Karte zuzuordnen. Untersuchen Sie eine Live-Ergebnisseite in den Entwicklertools Ihres Browsers, um die aktuellen Klassennamen zu bestätigen, und verbinden Sie sie dann.
const fs = require('fs') const cheerio = require('cheerio') function parseArticle(card) { return { headline: card.find('a.gPFEn').text().trim(), publisher: card.find('.vr1PYe').text().trim(), time: card.find('time.hvbAAd').text().trim(), author: card.find('.bInasb span[aria-hidden="true"]').text().trim(), } } function extractArticles(html) { const $ = cheerio.load(html) const articles = [] $('article.UwIKyb').each((i, el) => { articles.push(parseArticle($(el))) }) return articles }
Das Muster ist unkompliziert: Wählen Sie jede article-Karte aus, dann ziehen Sie für jede den Schlagzeilen-Link, das Verleger-Label, das <time>-Element und die Autoren-Span heraus. Das .trim() bei jedem Aufruf entfernt das überschüssige Leerzeichen, das Googles Markup hinterlässt. Um auch den Link zu erfassen, lesen Sie das href der Schlagzeile mit card.find('a.gPFEn').attr('href') innerhalb von parseArticle.
Googles Klassennamen (die kurzen gehashten Strings wie gPFEn und UwIKyb) ändern sich ohne Vorankündigung. Behandeln Sie die oben genannten Selektoren als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld anfängt, leere Strings zurückzugeben, untersuchen Sie eine Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Dies ist routinemäßige Wartung für jeden Produktions-Scraper, kein Zeichen dafür, dass etwas kaputt ist.
Der vollständige Scraper
Hier sind Abruf und Parse in einer ausführbaren Datei zusammengefasst. Sie fordert die Seite über den Smart AI Proxy an, speichert das HTML, parst die Karten und gibt die strukturierten Ergebnisse aus. Geben Sie Ihr Token ein und führen Sie es aus.
const axios = require('axios') const https = require('https') const fs = require('fs') const cheerio = require('cheerio') const token = 'YOUR_CRAWLBASE_TOKEN' const url = 'https://news.google.com/home?hl=en-US&gl=US&ceid=US%3Aen' const agent = new https.Agent({ proxy: { host: 'smartproxy.crawlbase.com', port: 8012, auth: { username: token }, }, rejectUnauthorized: false, }) async function fetchGoogleNews(target) { const response = await axios.get(target, { httpsAgent: agent }) fs.writeFileSync('response.html', response.data) return response.data } function parseArticle(card) { return { headline: card.find('a.gPFEn').text().trim(), publisher: card.find('.vr1PYe').text().trim(), time: card.find('time.hvbAAd').text().trim(), author: card.find('.bInasb span[aria-hidden="true"]').text().trim(), } } function extractArticles(html) { const $ = cheerio.load(html) const articles = [] $('article.UwIKyb').each((i, el) => articles.push(parseArticle($(el)))) return articles } async function main() { const html = await fetchGoogleNews(url) const articles = extractArticles(html) fs.writeFileSync('articles.json', JSON.stringify(articles, null, 2)) console.log(articles) } main().catch((err) => console.error('Scrape failed:', err.message))
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript aus und Sie erhalten ein Array strukturierter Artikelobjekte, die in articles.json geschrieben und auf der Konsole ausgegeben werden. Ein gekürztes Beispiel:
[ { "headline": "Morning Report: Biden, Trump duel over border during separate Texas stops", "publisher": "The Hill", "time": "21 minutes ago", "author": "Alexis Simendinger & Kristina Karisch" }, { "headline": "Takeaways from the dueling border visits", "publisher": "CNN", "time": "9 hours ago", "author": "" }, { "headline": "Funeral draws crowds to Moscow church despite tight security", "publisher": "CBS News", "time": "5 minutes ago", "author": "Haley Ott" } ]
Beachten Sie den leeren Autor bei der zweiten Karte. Viele Google News-Einträge haben keine Autorenzeile, daher sind Leerfelder normal und kein Parsing-Fehler. Filtern oder setzen Sie diese Felder downstream entsprechend dem, was Ihr Job benötigt.
Nicht gesperrt bleiben
Auch mit verwaltetem Rendering und Rotation beobachtet Google scraper-artigen Traffic. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwierige Ziel.
- Pacing der Anfragen. Den gleichen Feed in einer engen Schleife zu hämmern ist der schnellste Weg zur Drosselung. Verteilen Sie Anfragen und variieren Sie die Abfrage oder das Thema, das Sie abrufen.
- Auf Rotation setzen. Das Verteilen von Anfragen über viele echte Benutzer-IPs verhindert, dass eine einzelne Adresse ein Rate-Limit auslöst. Der Smart AI Proxy erledigt das für Sie. Wenn Sie Ihren eigenen Pool verwenden, lesen Sie unseren Vergleich von Rechenzentrum- und privaten Proxys und richten Sie die Rotation richtig ein.
- Status-Codes lesen. Ein Lauf, der anfängt, Herausforderungen oder Fehler zurückzugeben, signalisiert, dass die aktuelle Rate zu hoch ist. Reduzieren Sie die Geschwindigkeit, anstatt durchzudrücken.
Für das umfassendere Playbook lesen Sie wie Sie Websites scrapen, ohne gesperrt zu werden. Wenn Sie News im großen Maßstab über viele Themen scrapen, behandelt Large-Scale Web Scraping die Orchestrierungsseite, und ein Suchwerkzeug aufbauen zeigt, was Sie zusammenstellen können, sobald Sie einen stetigen Feed strukturierter Ergebnisse haben.
Ist es legal, Google News zu scrapen?
Ob das Scrapen von Google News erlaubt ist, hängt von Googles Nutzungsbedingungen, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Behandeln Sie dies als Orientierung und nicht als Rechtsberatung. Google News ist ein Aggregator: Die Schlagzeilen und Snippets verweisen auf Inhalte einzelner Verlage, und Googles Bedingungen schränken den automatisierten Zugriff ein. Kein Code hier ändert das. Er lässt nur den technischen Teil funktionieren.
Einige Grundsätze, die es wert sind, eingehalten zu werden. Sammeln Sie nur öffentliche Ergebnisse: die Schlagzeilen, Quellen, Zeitstempel und Links, die jeder ohne Konto sehen kann. Prüfen Sie Googles robots.txt und respektieren Sie die angegebenen Rate-Erwartungen. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie die Server von niemandem belasten. Reproduzieren oder redistribuieren Sie keinen vollständigen Artikeltext, der den Originalverlegern gehört und in der Regel urheberrechtlich geschützt ist. Und sammeln Sie niemals persönliche oder private Daten.
Dieser Leitfaden ist bewusst auf öffentliche Feed-Daten beschränkt, denn das ist die Grenze, die die Arbeit vertretbar macht. Er deckt nichts hinter einem Login ab, keine Konto- oder Profildaten, keine personalisierten Feeds, die mit einem identifizierbaren Benutzer verknüpft sind, und keinen Versuch, die Authentifizierung zu umgehen. Wenn Ihr Projekt mehr als öffentliche Schlagzeilen benötigt, ist der richtige Weg eine offizielle Datenvereinbarung oder eine lizenzierte News-API, kein ausgefeilterer Scraper.
Wichtigste Erkenntnisse
- Google News wird clientseitig gerendert. Ein einfacher Abruf gibt eine nahezu leere Hülle zurück, daher müssen Sie die Seite rendern, bevor Sie sie parsen.
- Der Smart AI Proxy gibt Ihnen Rendering und eine vertrauenswürdige IP. Richten Sie Ihren vorhandenen HTTP-Client auf den Proxy-Endpunkt mit Ihrem Token als Benutzernamen, und er rotiert IPs und rendert die Seite in einem Schritt.
- Cheerio erledigt die Extraktion. Ordnen Sie Schlagzeile, Verleger, Zeit und Autor den aktuellen Selektoren zu, und erwarten Sie, dass diese Selektoren sich im Laufe der Zeit verschieben.
- Leere Felder sind normal. Viele Karten haben keinen Autor, behandeln Sie also leere Strings, anstatt sie als Fehler zu behandeln.
- Bleiben Sie bei öffentlichen Daten. Respektieren Sie Googles ToS und robots.txt. Kein vollständiger Artikeltext, keine persönlichen Daten, keine login-gesperrten Feeds.
Häufig gestellte Fragen
Warum gibt ein einfacher Abruf keine Schlagzeilen von Google News zurück?
Weil Google News seinen Feed clientseitig mit JavaScript rendert. Das anfängliche HTML ist eine Hülle, die sich erst füllt, nachdem die Skripte der Seite in einem Browser ausgeführt wurden. Daher gibt eine rohe HTTP-Anfrage Status 200 zurück, wobei die Artikelfelder leer sind. Um echte Daten zu erhalten, müssen Sie die Seite zuerst rendern, was das Routing über den Smart AI Proxy für Sie erledigt.
Was ist der Crawlbase Smart AI Proxy?
Der Smart AI Proxy ist ein Drop-in-Proxy-Endpunkt, der durch einen großen Pool von Wohn- und Rechenzentrum-IPs rotiert und Seiten im Hintergrund rendert. Sie behalten Ihren normalen HTTP-Client bei und ändern nur, wohin er sich verbindet, und übergeben Ihr Zugriffstoken als Proxy-Benutzernamen. Intern leitet er an die Crawling API weiter, sodass Sie Rendering und IP-Rotation erhalten, ohne beides selbst zu verwalten.
Sollte ich den Smart AI Proxy oder die Crawling API für Google News verwenden?
Beide erreichen denselben Motor, also wählen Sie nach Integrationsstil. Der Smart AI Proxy ist die kleinste Änderung am vorhandenen Code: Setzen Sie einen Proxy-Host, -Port und -Token, und Ihre aktuelle Anfrage funktioniert. Die Crawling API ist ein direkter API-Aufruf, bei dem Sie Optionen wie JavaScript-Rendering und Wartezeiten explizit übergeben, was praktischer ist, wenn Sie eine genaue Kontrolle benötigen. Dieser Leitfaden verwendet den Proxy, weil er kaum eine Änderung an einer normalen axios-Anfrage erfordert.
Warum sind einige Autorenfelder in der Ausgabe leer?
Viele Google News-Karten haben einfach keine Autorenzeile, sodass der Autor-Selektor für diese Einträge einen leeren String zurückgibt. Das ist erwartet, kein Parsing-Fehler. Behandeln Sie es downstream, indem Sie diese Zeilen filtern, das Feld mit einem Standardwert versehen oder es je nach Bedarf Ihres Jobs leer lassen.
Meine Cheerio-Selektoren geben leere Strings zurück. Was hat sich geändert?
Höchstwahrscheinlich Googles Markup. Die gehashten Klassennamen wie gPFEn und UwIKyb ändern sich ohne Vorankündigung, sodass Selektoren, die letzten Monat funktioniert haben, brechen können. Untersuchen Sie eine Live-Ergebnisseite in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Selektorwartung ist für jeden Produktions-Scraper normal.
Kann ich den Smart AI Proxy verwenden, um andere Sites außer Google News zu scrapen?
Ja. Der Smart AI Proxy ist ein allgemeiner Endpunkt, sodass dasselbe Setup für die meisten öffentlichen Sites funktioniert: Ändern Sie die Ziel-URL und passen Sie Ihre Selektoren an die neue Seite an. Seine IP-Rotation und sein Rendering helfen bei einer Vielzahl von Zielen, was derselbe Ansatz ist, der in wie man Websites ohne Sperren scrapt behandelt wird.
Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.
Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.
