Comment gratter du Web sur Yelp.com (mise à jour 2023) - Guide étape par étape

Raluca Penciuc le Mar 03 2023

blog-image

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 :

blog-image

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 :

blog-image

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 :

blog-image

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.

blog-image

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

vignette
GuidesComment récupérer les données des produits Amazon : Un guide complet des meilleures pratiques et des outils

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.

Suciu Dan
avatar de l'auteur
Suciu Dan
15 minutes de lecture
vignette
GuidesGuide de démarrage rapide de l'API Web Scraping

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.

Mihnea-Octavian Manolache
avatar de l'auteur
Mihnea-Octavian Manolache
9 minutes de lecture
vignette
Cas d'utilisationXPath et les sélecteurs CSS

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 !

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