Comment récupérer les sitemaps des sites web pour une meilleure efficacité

Robert Munceanu le 20 mai 2021

blog-image

Bonjour et bienvenue dans notre émission sur le web scraping ! Dans l'épisode d'aujourd'hui, nous allons découvrir comment l'optimisation des prix peut aider notre entreprise à se développer en scrappant un site web à l'aide de ses sitemaps.

Si vous voulez savoir ce qui va se passer ensuite, prenez un siège et quelques snacks, et continuez à regarder, je veux dire, à lire !

Pourquoi avez-vous besoin de données sur les produits ?

L'utilisation de l'information publique pour la croissance de l'entreprise est une pratique courante parmi les chefs d'entreprise du monde entier.

La veille tarifaire, la surveillance de la concurrence, l'optimisation des revenus et d'autres solutions pour aider votre entreprise à prospérer peuvent être obtenues à l'aide d'un outil de "web scraping". Imaginez le temps nécessaire pour copier et coller les informations de centaines de produits dans un tableau. C'est là que WebScrapingAPI change les règles du jeu.

La manière classique de collecter des informations avec un outil de "web scraping".

Imaginons que vous souhaitiez récupérer en masse les produits d'un site web. L'une des façons d'utiliser un outil de web scraping consiste à sélectionner manuellement l'URL de chaque page de produit pour que l'outil la scrape. Cela signifie que vous devez faire des recherches sur le site web et voir où se trouve chaque page de produit, etc.

Si le site web ne compte que quelques dizaines de pages, cela peut être gérable, mais qu'en est-il si le site web compte des centaines, voire des milliers de pages ? Le travail pourrait devenir un peu fastidieux, prendre beaucoup de temps et être désagréable.

Que pouvons-nous faire dans une telle situation ?

La manière la plus rapide de procéder

Les sitemaps. De quoi s'agit-il ?

Les sitemaps peuvent être utiles en matière de référencement. Ils sont comme le plan d'un site web, aidant les moteurs de recherche à trouver, explorer ou même indexer tout le contenu de votre site web.

Ils sont généralement utilisés par les grands sites web pour mieux structurer leurs pages et aider les moteurs de recherche à identifier les pages les plus importantes des pages les moins importantes.

Pouvons-nous utiliser ces sitemaps à notre avantage lors du scraping ? Bien sûr ! Découvrons comment ils peuvent nous aider à récupérer en masse le contenu d'un site web.

Essayons la méthode !

Pour pouvoir utiliser WebScrapingAPI, nous devons créer notre compte et obtenir notre clé d'accès privée utilisée pour nous authentifier auprès de l'API. Vous n'avez pas à vous inquiéter, car la création de votre compte est gratuite et vous n'avez pas besoin d'ajouter votre carte ou d'autres informations personnelles.

Lors de la connexion, nous serons redirigés vers le tableau de bord. Nous y verrons notre clé d'accès que nous utiliserons dans quelques instants. Veillez à la conserver pour vous, mais si vous pensez que votre clé privée a été compromise, vous pouvez toujours la réinitialiser en cliquant sur le bouton "Reset API Key" (réinitialiser la clé API).

Pour plus de détails sur le fonctionnement de WebScrapingAPI et la façon dont il peut être intégré dans votre projet, vous pouvez toujours consulter sa documentation, et pour tester les choses, l'API Playground vous aide à visualiser les résultats encore mieux !

Finie la présentation, voyons comment nous pouvons utiliser WebScrapingAPI pour faire du scrape en utilisant des sitemaps.

Pour cet exemple, nous utiliserons NodeJS comme langage de programmation, mais vous pouvez utiliser n'importe quel langage de programmation avec lequel vous êtes à l'aise. Ensuite, nous allons récupérer le plan du site et analyser les URL des produits, récupérer les pages des produits et stocker les données dans un fichier csv. De cette manière, vous pouvez faire du scrape en masse en utilisant WebScrapingAPI, mais si vous souhaitez ne scraper que certaines pages, vous pouvez également faire des requêtes spécifiques.

1. Trouver les URL de sitemap

Dans cet exemple, nous examinerons les sitemaps de Maplin, qui se trouvent au bas de leur fichier robots.txt.

En suivant l'URL ci-dessus, nous serons redirigés vers le XML contenant les liens sitemap.

blog-image

Si nous suivons le premier lien ci-dessus, nous obtiendrons le plan du site de différentes pages, dont certaines sont des pages de produits ! C'est à partir de ces pages que nous allons extraire les données et les enregistrer dans un fichier CSV pour une utilisation ultérieure. Cela semble simple, n'est-ce pas ?

blog-image

2. Identifier les sélecteurs

Afin d'extraire uniquement les données dont nous avons besoin, nous devons savoir où elles se trouvent. Pour ce faire, visitons l'URL des interrupteurs d'éclairage intelligents mentionnée ci-dessus et utilisons l'outil d'inspection du développeur.

Nous constatons que chaque produit de la liste est situé sous une balise li avec la classe ais-Hits-item.

À l'intérieur de ce nœud, nous voyons que le titre et le prix se trouvent respectivement sous la balise h3 avec la classe result-title et la balise span avec la classe after_special price.

blog-image

3. Installer les paquets nécessaires

Cette étape est assez simple ; il suffit d'installer cet ensemble de paquets :

  • jsdom : utile pour l'analyse HTML.
  • got : ce paquet nous aidera à effectuer la requête HTTP à WebScrapingAPI.
  • xml2js : analyse le xml et le convertit en objet pour une utilisation plus facile.
  • csv-writer : pour stocker les données extraites dans un fichier csv.

Pour installer tous ces paquets, il suffit d'utiliser cette ligne de commande dans le terminal de vos projets :

npm install jsdom got xml2js csv-writer

4. Préparer les paramètres de la demande

Ici, nous utiliserons l'une des fonctions de WebScrapingAPI pour rendre la page et attendre que tout son contenu soit chargé. De cette façon, nous pouvons obtenir plus de données. N'oubliez pas d'ajouter votre clé d'accès privée et l'URL que vous souhaitez récupérer, dans notre cas, l'URL du plan du site contenant les liens vers les pages de produits.

const api_url = "https://api.webscrapingapi.com/v1"
const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
let params = {
api_key: "XXXXX",
url: url,
render_js: 1,
wait_until: 'networkidle2'
}

5. Effectuer la demande et analyser la chaîne XML résultante

Après avoir obtenu le résultat de l'API, nous devons convertir la chaîne xml en un objet.

const response = await got(api_url, {searchParams: params})

const parser = new xml2js.Parser()
parser.parseString(response.body, async function (err, result) {
// the rest of the code
}

L'étape suivante consistera à parcourir les URL des produits, à créer une requête pour chacun d'entre eux afin d'en extraire les données et à sélectionner les informations à stocker.

6. Itérer, demander, sélectionner

Nous n'aurons pas besoin de parcourir toutes les URL du plan du site pour cet exemple, nous ne prendrons donc que les URL des positions 5 à 10. Ensuite, nous préparerons les paramètres de la requête API et utiliserons JSDOM pour analyser le code HTML résultant.

Pour sélectionner le titre et le prix du produit, nous avons vu précédemment qu'ils se trouvent respectivement dans la balise h3 avec la classe result-title et la balise span avec la classe after_special price.

Après avoir créé un objet avec le titre et le prix que nous venons d'extraire, nous le plaçons dans le tableau des produits.

Le code devrait ressembler à ceci :

let products = []

for (let index = 5; index < 10; index++) {
params.url = result['urlset']['url'][index]['loc'][0]

const res = await got(api_url, {searchParams: params})

const {document} = new JSDOM(res.body).window

const elements = document.querySelectorAll('li.ais-Hits-item')
if (elements) {
elements.forEach((element) => {
let element_obj = {}

const title = element.querySelector('h3.result-title')
if (title && title.innerHTML) element_obj.title = title.innerHTML
const price = element.querySelector('.after_special.price')
if (price && price.innerHTML) element_obj.price = price.innerHTML

if (element_obj && element_obj.title && element_obj.price)
products.push(element_obj)
})
}
}

7. Stocker les données extraites

Nous utilisons ici la bibliothèque csv-writer pour nous aider à convertir une liste d'objets en un fichier csv.

Il suffit de spécifier le chemin et le nom du fichier qui sera bientôt créé, ainsi que le tableau d'en-têtes, qui consiste en des objets colonnes, où l'id représente les propriétés des objets produits et le title est le nom de la colonne.

const csvWriter = require('csv-writer').createObjectCsvWriter({
path: 'products.csv',
header: [
{id: 'title', title: 'Product Name'},
{id: 'price', title: 'Product Price'}
]
})
csvWriter.writeRecords(products).then(() => console.log('Success!!'))

8. Vous avez terminé !

Nous avons réussi à extraire des données en utilisant des sitemaps pour naviguer dans les pages produits d'un site web, félicitations ! Voici la vue complète du code :

const {JSDOM} = require("jsdom");
const got = require("got");
const xml2js = require("xml2js");

(async () => {
const api_url = "https://api.webscrapingapi.com/v1"
const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
let params = {
api_key: "XXXXX",
url: url,
render_js: 1,
wait_until: 'networkidle2'
}
const response = await got(api_url, {searchParams: params})

const parser = new xml2js.Parser()
parser.parseString(response.body, async function (err, result) {

let products = []

for (let index = 5; index < 10; index++) {
params.url = result['urlset']['url'][index]['loc'][0]

const res = await got(api_url, {searchParams: params})

const {document} = new JSDOM(res.body).window

const elements = document.querySelectorAll('li.ais-Hits-item')
if (elements) {
elements.forEach((element) => {
let element_obj = {}

const title = element.querySelector('h3.result-title')
if (title && title.innerHTML) element_obj.title = title.innerHTML
const price = element.querySelector('.after_special.price')
if (price && price.innerHTML) element_obj.price = price.innerHTML

if (element_obj && element_obj.title && element_obj.price)
products.push(element_obj)
})
}
}

const csvWriter = require('csv-writer').createObjectCsvWriter({
path: 'products.csv',
header: [
{id: 'title', title: 'Product Name'},
{id: 'price', title: 'Product Price'}
]
})

csvWriter.writeRecords(products).then(() => console.log('Success!!'))
})
})();

Essayez vous-même !

J'espère que ce tutoriel vous a été utile et qu'il vous a permis de comprendre à quel point il est simple d'utiliser les sitemaps à notre avantage en ce qui concerne le web scraping.

Cela prend encore moins de temps, et vous ne manquerez pas de pages comme vous le feriez normalement en naviguant manuellement sur un site web.

En ce qui concerne le scraping en masse, il est clair que l'utilisation de sitemaps est une bien meilleure solution que la sélection manuelle de chaque page de produit ou même l'utilisation d'un spider pour explorer le site web.

En attendant le prochain épisode de notre émission sur le web scraping, pourquoi ne pas essayer WebScrapingAPI ? Vous pouvez le tester avec jusqu'à 1000 appels d'API gratuits. À la prochaine fois !

Nouvelles et mises à jour

Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

vignette
GuidesLe guide ultime de l'automatisation et de la récupération de données sur le Web de Playwright pour 2023

Apprenez à utiliser Playwright pour le scraping web et l'automatisation grâce à notre guide complet. De la configuration de base aux techniques avancées, ce guide couvre tout.

Suciu Dan
avatar de l'auteur
Suciu Dan
16 minutes de lecture
vignette
GuidesParsel : Comment extraire du texte à partir de HTML en Python

Libérez la puissance de l'automatisation et extrayez facilement des données précieuses du web. Cet article vous guidera dans l'utilisation de la bibliothèque Parsel en Python pour extraire des données de sites web à l'aide de sélecteurs CSS et XPath.

Mihai Maxim
avatar de l'auteur
Mihai Maxim
7 minutes de lecture
vignette
GuidesWeb Scraping avec Scrapy : La méthode facile

Maîtrisez le web scraping avec Scrapy. Apprenez étape par étape avec des exemples pratiques dans ce guide complet. Rejoignez les grandes ligues de l'extraction de données dès maintenant !

Mihai Maxim
avatar de l'auteur
Mihai Maxim
13 minutes de lecture