Comment gratter du Web sur Yelp.com (mise à jour 2023) - Guide étape par étape
Raluca Penciuc le Mar 03 2023

Yelp est une plateforme qui permet aux utilisateurs de rechercher des entreprises, de lire des avis et même de faire des réservations. Il s'agit d'un site web populaire qui compte des millions de visiteurs par mois, ce qui en fait une cible idéale pour le scraping de données.
Savoir comment faire du web scrape sur Yelp peut être un outil puissant pour les entreprises et les entrepreneurs qui cherchent à recueillir des informations précieuses sur le marché local.
Dans cet article, nous allons explorer les avantages du web scraping Yelp, y compris les informations sur la façon de configurer l'environnement, de localiser les données et d'extraire des informations précieuses.
Nous examinerons également les idées commerciales potentielles qui peuvent être créées à l'aide de ces données récupérées, et nous verrons pourquoi il est préférable d'utiliser un scrapeur professionnel plutôt que de créer son propre scrapeur. À la fin de cet article, vous aurez une bonne compréhension de la manière de récupérer les données de Yelp sur le Web.
Configuration de l'environnement
Avant de commencer, assurons-nous que nous disposons des outils nécessaires.
Tout d'abord, téléchargez et installez Node.js depuis le site officiel, en veillant à utiliser la version Long-Term Support (LTS). Cela permettra également d'installer automatiquement Node Package Manager (NPM), que nous utiliserons pour installer d'autres dépendances.
Pour ce tutoriel, nous utiliserons Visual Studio Code comme environnement de développement intégré (IDE), mais vous pouvez utiliser tout autre IDE de votre choix. Créez un nouveau dossier pour votre projet, ouvrez le terminal et exécutez la commande suivante pour créer un nouveau projet Node.js :
npm init -y
Cela créera un fichier package.json dans le répertoire de votre projet, qui contiendra des informations sur votre projet et ses dépendances.
Ensuite, nous devons installer TypeScript et les définitions de type pour Node.js. TypeScript offre un typage statique optionnel qui permet d'éviter les erreurs dans le code. Pour ce faire, exécutez dans le terminal
npm install typescript @types/node --save-dev
Vous pouvez vérifier l'installation en exécutant le programme :
npx tsc --version
TypeScript utilise un fichier de configuration appelé tsconfig.json pour stocker les options du compilateur et d'autres paramètres. Pour créer ce fichier dans votre projet, exécutez la commande suivante :
npx tsc -init
Assurez-vous que la valeur de "outDir" est fixée à "dist". De cette manière, nous séparerons les fichiers TypeScript des fichiers compilés. Vous trouverez plus d'informations sur ce fichier et ses propriétés dans la documentation officielle de TypeScript.
Maintenant, créez un répertoire "src" dans votre projet, et un nouveau fichier "index.ts". C'est ici que nous conserverons le code de scraping. Pour exécuter du code TypeScript, il faut d'abord le compiler, donc pour être sûr de ne pas oublier cette étape supplémentaire, nous pouvons utiliser une commande personnalisée.
Allez dans le fichier "package.json", et éditez la section "scripts" comme ceci :
"scripts": {
"test": "npx tsc && node dist/index.js"
}
Ainsi, lorsque vous exécuterez le script, il vous suffira de taper "npm run test" dans votre terminal.
Enfin, pour récupérer les données du site web, nous utiliserons Puppeteer, une bibliothèque de navigateur sans tête pour Node.js qui vous permet de contrôler un navigateur web et d'interagir avec des sites web de manière programmatique. Pour l'installer, exécutez la commande suivante dans le terminal :
npm install puppeteer
Il est fortement recommandé lorsque vous souhaitez vous assurer de l'exhaustivité de vos données, car de nombreux sites Web contiennent aujourd'hui du contenu généré de manière dynamique. Si vous êtes curieux, vous pouvez consulter avant de continuer la documentation de Puppeteer pour voir de quoi il est capable.
Localisation des données
Maintenant que votre environnement est configuré, nous pouvons commencer à extraire les données. Pour cet article, j'ai choisi de récupérer la page d'un restaurant irlandais de Dublin : https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants.
Nous allons extraire les données suivantes :
- le nom du restaurant ;
- la note du restaurant ;
- le nombre d'avis sur le restaurant ;
- le site web de l'entreprise ;
- le numéro de téléphone de l'entreprise ;
- les adresses physiques des restaurants.
Toutes ces informations sont mises en évidence dans la capture d'écran ci-dessous :

En ouvrant les outils de développement sur chacun de ces éléments, vous pourrez remarquer les sélecteurs CSS que nous utiliserons pour localiser les éléments HTML. Si vous ne savez pas comment fonctionnent les sélecteurs CSS, n'hésitez pas à consulter ce guide pour débutants.
Extraction des données
Avant d'écrire notre script, vérifions que l'installation de Puppeteer s'est bien déroulée :
import puppeteer from 'puppeteer';
async function scrapeYelpData(yelp_url: string): Promise<void> {
// Launch Puppeteer
const browser = await puppeteer.launch({
headless: false,
args: ['--start-maximized'],
defaultViewport: null
})
// Create a new page
const page = await browser.newPage()
// Navigate to the target URL
await page.goto(yelp_url)
// Close the browser
await browser.close()
}
scrapeYelpData("https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants")
Ici, nous ouvrons une fenêtre de navigateur, créons une nouvelle page, naviguons jusqu'à l'URL cible et fermons le navigateur. Pour des raisons de simplicité et de débogage visuel, j'ouvre la fenêtre du navigateur en mode maximisé et non sans tête.
Examinons maintenant la structure du site :

Il semble que Yelp affiche une structure de page quelque peu difficile, car les noms de classe sont générés de manière aléatoire et très peu d'éléments ont des valeurs d'attribut uniques.
Mais n'ayez crainte, nous pouvons être créatifs avec la solution. Tout d'abord, pour obtenir le nom du restaurant, nous ciblons le seul élément "h1" présent sur la page.
// Extract restaurant name
const restaurant_name = await page.evaluate(() => {
const name = document.querySelector('h1')
return name ? name.textContent : ''
})
console.log(restaurant_name)
Maintenant, pour obtenir la note du restaurant, vous pouvez remarquer qu'en plus des icônes d'étoiles, la valeur explicite est présente dans l'attribut "aria-label". Nous ciblons donc l'élément "div" dont l'attribut "aria-label" se termine par la chaîne "star rating".
// Extract restaurant rating
const restaurant_rating = await page.evaluate(() => {
const rating = document.querySelector('div[aria-label$="star rating"]')
return rating ? rating.getAttribute('aria-label') : ''
})
console.log(restaurant_rating)
Enfin (pour cette section HTML particulière), nous voyons que nous pouvons facilement obtenir le numéro de l'examen en ciblant l'élément d'ancrage mis en évidence.
// Extract restaurant reviews
const restaurant_reviews = await page.evaluate(() => {
const reviews = document.querySelector('a[href="#reviews"]')
return reviews ? reviews.textContent : ''
})
console.log(restaurant_reviews)
Simple comme bonjour. Jetons un coup d'œil au widget d'informations sur les entreprises :

Malheureusement, dans cette situation, nous ne pouvons pas compter sur les sélecteurs CSS. Heureusement, nous pouvons utiliser une autre méthode pour localiser les éléments HTML : XPath. Si vous ne connaissez pas encore le fonctionnement des sélecteurs CSS, n'hésitez pas à consulter ce guide pour débutants.
Pour extraire le site web du restaurant : nous appliquons la logique suivante :
localisez l'élément "p" dont le contenu textuel est "Business website" ;
localiser le frère ou la sœur suivant(e)
localiser l'élément d'ancrage et son attribut "href".
// Extract restaurant website
const restaurant_website_element = await page.$x("//p[contains(text(), 'Business website')]/following-sibling::p/a/@href")
const restaurant_website = await page.evaluate(
element => element.nodeValue,
restaurant_website_element[0]
)
console.log(restaurant_website)
Pour le numéro de téléphone et l'adresse, nous pouvons suivre exactement la même logique, à deux exceptions près :
- pour le numéro de téléphone, nous arrêtons le frère suivant et extrayons sa propriété textContent ;
- pour l'adresse, nous ciblons le frère ou la sœur suivant(e) de l'élément parent.
// Extract restaurant phone number
const restaurant_phone_element = await page.$x("//p[contains(text(), 'Phone number')]/following-sibling::p")
const restaurant_phone = await page.evaluate(
element => element.textContent,
restaurant_phone_element[0]
)
console.log(restaurant_phone)
// Extract restaurant address
const restaurant_address_element = await page.$x("//a[contains(text(), 'Get Directions')]/parent::p/following-sibling::p")
const restaurant_address = await page.evaluate(
element => element.textContent,
restaurant_address_element[0]
)
console.log(restaurant_address)
Le résultat final devrait ressembler à ceci :
The Boxty House
4.5 étoiles
948 commentaires
/biz_redir?url=http%3A%2F%2Fwww.boxtyhouse.ie%2F&cachebuster=1673542348&website_link_type=website&src_bizid=EoMjdtjMgm3sTv7dwmfHsg&s=16fbda8bbdc467c9f3896a2dcab12f2387c27793c70f0b739f349828e3eeecc3
(01) 677 2762
20-21 Temple Bar Dublin 2
Contourner la détection des robots
Si le scraping de Yelp peut sembler facile au début, le processus peut devenir plus complexe et plus difficile à mesure que vous développez votre projet. Le site web met en œuvre diverses techniques pour détecter et empêcher le trafic automatisé, de sorte que votre scraper à grande échelle commence à être bloqué.
Yelp recueille plusieurs données de navigation afin de générer et d'associer une empreinte digitale unique. En voici quelques-unes :
- propriétés de l'objet Navigator (deviceMemory, hardwareConcurrency, platform, userAgent, webdriver, etc.)
- le calendrier et les contrôles de performance
- travailleurs des services
- contrôle des dimensions de l'écran
- et bien d'autres encore
L'une des façons de surmonter ces difficultés et de poursuivre le scraping à grande échelle consiste à utiliser une API de scraping. Ce type de service offre un moyen simple et fiable d'accéder aux données de sites web tels que yelp.com, sans avoir besoin de construire et d'entretenir son propre scraper.
WebScrapingAPI est un exemple de ce type de produit. Son mécanisme de rotation de proxy évite complètement les CAPTCHA, et sa base de connaissances étendue permet de randomiser les données du navigateur afin qu'il ressemble à un utilisateur réel.
L'installation est simple et rapide. Il vous suffit d'ouvrir un compte pour recevoir votre clé API. Elle est accessible depuis votre tableau de bord et sert à authentifier les demandes que vous envoyez.

Comme vous avez déjà configuré votre environnement Node.js, nous pouvons utiliser le SDK correspondant. Exécutez la commande suivante pour l'ajouter aux dépendances de votre projet :
npm install webscrapingapi
Il ne reste plus qu'à envoyer une requête GET pour recevoir le document HTML du site web. Notez que ce n'est pas la seule façon d'accéder à l'API.
import webScrapingApiClient from 'webscrapingapi';
const client = new webScrapingApiClient("YOUR_API_KEY");
async function exampleUsage() {
const api_params = {
'render_js': 1,
'proxy_type': 'residential',
}
const URL = "https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants"
const response = await client.get(URL, api_params)
if (response.success) {
console.log(response.response.data)
} else {
console.log(response.error.response.data)
}
}
exampleUsage();
En activant le paramètre "render_js", nous envoyons la requête à l'aide d'un navigateur sans tête, comme vous l'avez fait précédemment dans ce tutoriel.
Après avoir reçu le document HTML, vous pouvez utiliser une autre bibliothèque pour extraire les données qui vous intéressent, comme Cheerio. Vous n'en avez jamais entendu parler ? Consultez ce guide pour vous aider à démarrer !
Conclusion
Cet article vous a présenté un guide complet sur la façon de faire du web scrape Yelp en utilisant TypeScript et Puppeteer. Nous avons passé en revue le processus de mise en place de l'environnement, la localisation et l'extraction des données, et les raisons pour lesquelles l'utilisation d'un scraper professionnel est une meilleure solution que la création de votre propre scraper.
Les données extraites de Yelp peuvent être utilisées à diverses fins : identification des tendances du marché, analyse du sentiment des clients, surveillance des concurrents, création de campagnes de marketing ciblées, etc.
Dans l'ensemble, le web scraping de Yelp.com peut être un atout précieux pour quiconque cherche à obtenir un avantage concurrentiel sur son marché local et ce guide a fourni un excellent point de départ pour y parvenir.
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

Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.


Commencez avec WebScrapingAPI, la solution ultime de web scraping ! Collectez des données en temps réel, contournez les systèmes anti-bots et bénéficiez d'une assistance professionnelle.


Les sélecteurs XPath sont-ils meilleurs que les sélecteurs CSS pour le web scraping ? Découvrez les points forts et les limites de chaque méthode et faites le bon choix pour votre projet !
