Google News agrège les titres de milliers d'éditeurs dans un flux en perpétuel renouvellement, ce qui en fait une source attrayante si vous suivez un sujet, observez la propagation d'une histoire ou constituez un jeu de données sur qui a rapporté quoi et quand. Le problème est que la page est conçue pour les navigateurs, pas pour les scripts : elle s'affiche côté client et résiste au trafic automatisé, si bien qu'une requête HTTP brute vous renvoie une coquille presque vide à la place des titres recherchés.

Ce guide vous montre comment scraper Google News avec JavaScript. Vous allez créer un petit script Node exécutable qui récupère la page rendue via le Smart AI Proxy Crawlbase, puis analyse les titres, les éditeurs, les dates de publication et les auteurs avec Cheerio, et les écrit au format JSON. Tout ce guide se limite aux résultats publics accessibles sans connexion, et la section sur la légalité, vers la fin, mérite d'être lue avant de viser un volume réel.

Pourquoi scraper Google News

Une simple visite sur Google News vous montre l'état du flux à un instant donné. L'intérêt du scraping est de transformer ce flux en mouvement en lignes structurées que vous pouvez stocker, interroger et comparer dans le temps. Quelques usages concrets :

  • Suivi des tendances et des sujets. Observez quelles histoires remontent pour une requête et comment la couverture évolue au fil de la journée : utile pour la recherche, le journalisme et la planification SEO.
  • Veille concurrentielle et de marque. Collectez en une passe les mentions d'une entreprise, d'un produit ou d'un dirigeant dans de nombreux médias, sans les consulter un à un.
  • Signal de marché et financier. Agrégez les titres autour d'un secteur ou d'un ticker pour alimenter un tableau de bord ou un modèle.
  • Curation de contenu. Injectez des titres frais et pertinents dans une newsletter ou un flux interne sans parcourir manuellement les sources.

Dans tous les cas, la sortie a la même forme : des lignes titre, source, horodatage, lien et auteur exploitables directement. C'est la donnée que ce scraper produit.

Quelles données vous pouvez extraire

Avant d'écrire un sélecteur, il est utile de savoir quels champs sont présents sur une page de résultats Google News et valent la peine d'être récupérés. Chaque carte d'article dans le flux expose un ensemble prévisible de valeurs :

  • Titre. Le titre de l'article tel qu'il apparaît dans le flux.
  • Éditeur. Le média source qui a publié l'histoire (CNN, The Hill, etc.).
  • Date de publication. Un horodatage relatif comme "il y a 21 minutes" ou "il y a 9 heures".
  • Auteur. La signature lorsque la carte en comporte une ; de nombreuses cartes n'en ont pas, attendez-vous donc à des champs vides.
  • Lien vers l'article. Le href sur le titre, qui pointe vers la publication source.

Cet ensemble couvre la plupart des tâches de veille et de recherche. Nous extrairons le titre, l'éditeur, la date et l'auteur dans le code ci-dessous ; récupérer le lien est un ajout d'une ligne une fois la carte en main.

Pourquoi une requête simple échoue ici

Envoyez une requête à une URL Google News avec un client HTTP brut et vous obtenez une réponse 200 dont le corps est principalement un cadre vide. Deux obstacles se dressent contre vous. Premièrement, le flux s'affiche dans le navigateur : le HTML initial est une coquille qui se remplit seulement après l'exécution du JavaScript de la page. Deuxièmement, Google détecte rapidement le trafic automatisé, si bien que les IP de datacenter et les modèles de requête non-navigateur sont ralentis ou mis en défi avant même d'atteindre le contenu rendu.

Un scraper Google News fonctionnel a donc besoin de deux choses simultanément : quelque chose qui rend la page comme un vrai navigateur, et une IP que la plateforme lit comme un visiteur réel. Vous pouvez construire cela vous-même avec un navigateur sans interface graphique plus un pool d'adresses IP rotatives, mais assembler cette pile et la maintenir en bonne santé représente l'essentiel de l'effort. Le Smart AI Proxy Crawlbase combine les deux en un seul point de terminaison : dirigez votre client HTTP habituel vers lui, et il route la requête à travers des IP résidentielles et de datacenter rotatives puis vous renvoie la page à analyser.

Smart AI Proxy ou Crawling API

Le Smart AI Proxy est un point de terminaison proxy de substitution : vous continuez à utiliser votre client HTTP existant et changez uniquement la destination de connexion. En coulisses, il transfère vers la Crawling API, vous bénéficiez donc du même rendu et de la même rotation d'IP. Si vous préférez appeler une API directement et passer des options comme le rendu JavaScript explicitement, utilisez la Crawling API ; ce guide emprunte la voie du proxy car c'est la modification minimale à une requête normale.

Prérequis

Vous avez besoin de trois choses avant d'écrire du code :

  • Node.js installé. Node exécute JavaScript hors du navigateur et vous donne npm pour installer des bibliothèques. Confirmez l'installation avec node --version.
  • Bases de JavaScript. La maîtrise des variables, des fonctions et des appels asynchrones suffit pour suivre ce guide.
  • Un token Crawlbase. Créez un compte gratuit, ouvrez le tableau de bord Smart AI Proxy et copiez le token d'accès dans les détails de connexion. Ce token fait office de nom d'utilisateur proxy, il est donc intégré dans la requête elle-même.

Configurer le projet

Créez un dossier de projet, initialisez-le et installez les deux bibliothèques dont le scraper a besoin.

bash
node --version

mkdir google-news-scraper && cd google-news-scraper
npm init -y
npm install axios cheerio

Deux dépendances font le travail : axios effectue la requête HTTP et se configure facilement avec un proxy, et cheerio analyse le HTML renvoyé avec une API similaire à jQuery côté serveur. Les modules natifs https et fs de Node couvrent l'agent proxy et l'écriture de fichiers, il n'y a donc rien d'autre à installer.

Récupérer la page rendue via le Smart AI Proxy

La première tâche consiste à obtenir le HTML final. Vous configurez un agent HTTPS qui pointe vers l'hôte et le port du Smart AI Proxy, passez votre token comme nom d'utilisateur proxy, et laissez axios envoyer la requête à travers lui. Le proxy rend la page et renvoie le balisage réel au lieu de la coquille vide qu'une requête directe vous donnerait. Remplacez YOUR_CRAWLBASE_TOKEN par le token de votre tableau de bord.

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

Quelques détails font un vrai travail ici. L'agent route chaque requête via smartproxy.crawlbase.com sur le port 8012, votre token est transmis comme nom d'utilisateur proxy, et rejectUnauthorized: false permet au proxy de terminer TLS sans conflit de certificat. Sauvegarder le corps dans response.html signifie que vous pouvez récupérer une fois et itérer sur les sélecteurs avec le fichier local au lieu de consommer une requête à chaque modification.

Lancez avec node scraper.js. Vous devriez voir un statut 200 et un response.html contenant de vrais balises d'article, pas un cadre vide. Cela confirme que le rendu et le routage fonctionnent avant d'écrire un seul sélecteur.

Crawlbase Smart AI Proxy

Google News nécessite une page rendue derrière une IP de confiance, et le Smart AI Proxy vous offre les deux sans modifier la façon dont votre code effectue ses requêtes. Dirigez votre client HTTP existant vers le point de terminaison proxy et il fait tourner les IP résidentielles et de datacenter, rend la page et renvoie le HTML final, vous évitant de gérer vous-même une flotte sans interface graphique et un pool de proxies. Démarrez sur le niveau gratuit contre un flux public.

Analyser les résultats avec Cheerio

Le HTML sauvegardé, chargez-le dans Cheerio et parcourez les cartes d'articles. Chaque carte contient les champs souhaités, la tâche consiste donc à mapper le titre, l'éditeur, la date et l'auteur vers le bon sélecteur à l'intérieur de la carte. Inspectez une page de résultats en direct avec les outils de développement de votre navigateur pour confirmer les noms de classes actuels, puis câblez-les.

javascript
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
}

Le schéma est simple : sélectionnez chaque carte article, puis pour chacune extrayez le lien du titre, le libellé de l'éditeur, l'élément <time> et le span de l'auteur. Le .trim() sur chaque appel supprime les espaces superflus laissés par le balisage de Google. Pour capturer également le lien, lisez le href du titre avec card.find('a.gPFEn').attr('href') à l'intérieur de parseArticle.

Les sélecteurs évoluent

Les noms de classes de Google (les courtes chaînes hachées comme gPFEn et UwIKyb) changent sans préavis. Traitez les sélecteurs ci-dessus comme un modèle de départ, pas comme un contrat. Quand un champ commence à renvoyer des chaînes vides, réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur. C'est une maintenance de routine pour tout scraper en production, pas le signe que quelque chose est cassé.

Le scraper complet

Voici la récupération et l'analyse câblées dans un seul fichier exécutable. Il demande la page via le Smart AI Proxy, sauvegarde le HTML, analyse les cartes et affiche les résultats structurés. Insérez votre token et lancez.

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

À quoi ressemble la sortie

Lancez le script complet et vous obtenez un tableau d'objets article structurés, écrits dans articles.json et affichés dans la console. Un échantillon tronqué :

json
[
  {
    "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"
  }
]

Notez l'auteur vide sur la deuxième carte. De nombreuses entrées Google News ne portent pas de signature, les champs vides sont donc normaux, pas un bug d'analyse. Filtrez ou définissez des valeurs par défaut pour ces champs en aval selon les besoins de votre tâche.

Rester non bloqué

Même avec le rendu et la rotation gérés, Google surveille le trafic à l'allure d'un scraper. Quelques habitudes maintiennent une exécution en bonne santé, et elles s'appliquent à toute cible difficile.

  • Espacez vos requêtes. Marteler le même flux dans une boucle serrée est le moyen le plus rapide d'être ralenti. Espacez les requêtes et variez la requête ou le sujet que vous extrayez.
  • Misez sur la rotation. Répartir les requêtes sur de nombreuses IP d'utilisateurs réels est ce qui empêche une seule adresse de déclencher une limite de débit. Le Smart AI Proxy s'en charge pour vous ; si vous gérez votre propre infrastructure, pesez les proxies de datacenter contre les proxies résidentiels et configurez correctement la rotation.
  • Lisez les codes de statut. Une exécution qui commence à renvoyer des défis ou des erreurs vous indique que le débit actuel est trop élevé. Ralentissez plutôt que de forcer.

Pour le guide complet, consultez comment scraper des sites web sans être bloqué. Si vous scrapez des actualités à grande échelle sur de nombreux sujets, le scraping web à grande échelle couvre le côté orchestration, et la construction d'un outil de moteur de recherche montre ce que vous pouvez assembler une fois que vous avez un flux régulier de résultats structurés.

Est-il légal de scraper Google News ?

La question de savoir si le scraping de Google News est autorisé dépend des conditions d'utilisation de Google, de votre juridiction et de ce que vous faites des données : considérez ceci comme un guide, pas un conseil juridique. Google News est un agrégateur : les titres et extraits pointent vers du contenu appartenant à des éditeurs individuels, et les conditions de Google imposent des limites à l'accès automatisé. Rien dans ce code ne change cela. Il ne fait que rendre la partie technique fonctionnelle.

Quelques lignes à respecter. Ne collectez que les résultats publics, les titres, sources, horodatages et liens que tout le monde peut voir sans compte. Consultez le robots.txt de Google et respectez ses attentes de débit indiquées, et maintenez votre volume de requêtes suffisamment bas pour ne pas mettre à rude épreuve les serveurs de quiconque. Ne reproduisez ni ne redistribuez le texte intégral des articles, qui appartient aux éditeurs originaux et est généralement protégé par le droit d'auteur. Et ne collectez jamais de données personnelles ou privées.

Ce guide est délibérément limité aux données du flux public, car c'est la ligne qui rend le travail défendable. Il ne couvre rien derrière une connexion, les données de compte ou de profil, les flux personnalisés liés à un utilisateur identifiable, ni toute tentative de contournement de l'authentification. Si votre projet nécessite plus que des titres publics, la bonne démarche est un accord officiel de données ou une API d'actualités sous licence, pas un scraper plus astucieux.

Récapitulatif

Points clés

  • Google News est rendu côté client. Une requête simple renvoie une coquille presque vide, vous devez donc rendre la page avant de l'analyser.
  • Le Smart AI Proxy vous offre le rendu et une IP de confiance. Dirigez votre client HTTP existant vers le point de terminaison proxy avec votre token comme nom d'utilisateur et il fait tourner les IP et rend la page en une étape.
  • Cheerio fait l'extraction. Mappez le titre, l'éditeur, la date et l'auteur vers les sélecteurs actuels, et attendez-vous à ce que ces sélecteurs évoluent avec le temps.
  • Les champs vides sont normaux. De nombreuses cartes n'ont pas d'auteur, gérez donc les chaînes vides plutôt que de les traiter comme des erreurs.
  • Restez sur les données publiques. Respectez les CGU et le robots.txt de Google ; pas de texte d'article complet, pas de données personnelles, pas de flux verrouillés par connexion.

Foire aux questions

Pourquoi une requête simple ne renvoie-t-elle pas de titres depuis Google News ?

Parce que Google News rend son flux côté client avec JavaScript. Le HTML initial est une coquille qui se remplit seulement après l'exécution des scripts de la page dans un navigateur, donc une requête HTTP brute renvoie le statut 200 avec les champs d'article vides. Pour obtenir des données réelles, vous devez d'abord rendre la page, ce que le routage via le Smart AI Proxy gère pour vous.

Qu'est-ce que le Smart AI Proxy Crawlbase ?

Le Smart AI Proxy est un point de terminaison proxy de substitution qui fait tourner à travers un grand pool d'IP résidentielles et de datacenter et rend les pages en coulisses. Vous continuez à utiliser votre client HTTP normal et changez uniquement la destination de connexion, en passant votre token d'accès comme nom d'utilisateur proxy. En coulisses, il transfère vers la Crawling API, vous bénéficiez donc du rendu et de la rotation d'IP sans gérer l'un ou l'autre vous-même.

Dois-je utiliser le Smart AI Proxy ou la Crawling API pour Google News ?

Les deux atteignent le même moteur, choisissez donc selon le style d'intégration. Le Smart AI Proxy est la modification minimale du code existant : définissez un hôte proxy, un port et un token et votre requête actuelle fonctionne. La Crawling API est un appel API direct où vous passez des options comme le rendu JavaScript et les temps d'attente explicitement, ce qui est plus pratique quand vous avez besoin d'un contrôle fin. Ce guide utilise le proxy car il nécessite presque aucune modification d'une requête axios normale.

Pourquoi certains champs auteur sont-ils vides dans la sortie ?

De nombreuses cartes Google News ne portent tout simplement pas de signature, donc le sélecteur d'auteur renvoie une chaîne vide pour ces entrées. C'est attendu, pas un échec d'analyse. Gérez cela en aval en filtrant ces lignes, en définissant une valeur par défaut pour le champ, ou en le laissant vide selon les besoins de votre tâche.

Mes sélecteurs Cheerio renvoient des chaînes vides. Qu'est-ce qui a changé ?

Très probablement le balisage de Google. Les noms de classes hachées comme gPFEn et UwIKyb changent sans préavis, donc les sélecteurs qui fonctionnaient le mois dernier peuvent être cassés. Réinspectez une page de résultats en direct dans les outils de développement de votre navigateur et mettez à jour les sélecteurs. La maintenance périodique des sélecteurs est normale pour tout scraper en production.

Puis-je utiliser le Smart AI Proxy pour scraper d'autres sites que Google News ?

Oui. Le Smart AI Proxy est un point de terminaison général, donc la même configuration fonctionne pour la plupart des sites publics : changez l'URL cible et adaptez vos sélecteurs à la nouvelle page. Sa rotation d'IP et son rendu aident sur une large gamme de cibles, la même approche que celle couverte dans comment scraper des sites web sans être bloqué.

Commencer à construire

Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.

Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.

En libre-service · Sans appel commercial requis · Volumes de crawl entreprise disponibles