Lorsqu'ils planifient leurs voyages, la plupart des voyageurs se tournent vers Google pour trouver des hôtels. La plateforme centralise les fiches d'hôtels, les prix, les avis et les disponibilités. Pour les entreprises, les analystes et les plateformes de voyage, ces données sont précieuses. L'extraction de données Google Hôtels peut vous aider à suivre les tendances tarifaires, à surveiller la concurrence et à analyser les opportunités du marché du voyage.

Dans ce guide, nous vous montrerons comment récupérer les données de Google Hotels à l'aide de Python et du Crawlbase Crawling APIGrâce à cette méthode, vous pouvez collecter des données hôtelières à grande échelle sans vous soucier des blocages, des CAPTCHA ou des interdictions d'adresses IP. Nous couvrirons tout, de la configuration de votre environnement à la création d'un scraper complet pour les fiches et les pages individuelles des hôtels.

Commençons.

Table des Matières

  1. Pourquoi scraper Google Hotels ?
  2. Données clés à extraire de Google Hotels
  3. Crawlbase Crawling API pour le scraping des hôtels Google
  • Crawlbase Bibliothèque Python
  1. Configuration de votre environnement Python
  2. Extraction des résultats de recherche Google Hotels
  • Inspection du code HTML pour les sélecteurs
  • Rédaction du scraper de listes d'hôtels
  • Gestion de la pagination
  • Sauvegarde des données dans un fichier JSON
  • Exemple de code complet
  1. Extraction des détails individuels de l'hôtel
  • Inspection du code HTML pour les détails de l'hôtel
  • Rédaction du Scraper de détails
  • Sauvegarde des données dans un fichier JSON
  • Exemple de code complet
  1. Réflexions finales
  2. Foire aux questions (FAQ)

Pourquoi scraper Google Hotels ?

Google Hotels est l'une des plateformes les plus utilisées pour trouver et comparer des offres d'hôtels. Elle affiche les prix, les emplacements, les avis et les options de réservation, le tout au même endroit. En récupérant les données de Google Hotels, vous pouvez collecter des données pour la surveillance des prix, l'analyse de la concurrence et l'analyse du marché du voyage.

Voici quelques cas d'utilisation courants pour le scraping de Google Hotels :

  • Suivre les prix des hôtels:Voyez comment les prix évoluent au fil du temps selon les lieux et les saisons.
  • Comparer les concurrents: Découvrez comment les autres hôtels sont notés, tarifés et disponibles.
  • Recherche sur les voyages: Créez des outils qui montrent les meilleures offres d'hôtel, les modèles de voyage ou la popularité des destinations.
  • Données pour l'apprentissage automatique:Utilisez des données historiques pour prévoir la demande hôtelière ou les tendances de prix.

L'extraction manuelle de ces données prend du temps, mais avec le scraping Web Python, vous pouvez automatiser le processus et obtenir des données hôtelières structurées en un rien de temps.

Données clés à extraire de Google Hotels

Lors de l'extraction de données Google Hôtels, il est important de savoir quelles données sont les plus importantes. Ces informations sont utiles pour la surveillance des prix, l'analyse concurrentielle et la création d'outils de voyage.

L'image ci-dessous montre certains des champs les plus précieux que vous pouvez extraire :

Données clés à extraire de Google Hotels

Crawlbase Crawling API pour le scraping des hôtels Google

L'extraction des données Google Hôtels peut s'avérer complexe, car le site utilise JavaScript pour charger les fiches et les informations des hôtels. Les méthodes d'extraction traditionnelles ne permettent souvent pas d'obtenir l'intégralité du contenu HTML. C'est là que ça se passe. Crawlbase Crawling API entre en jeu.

Crawlbase Crawling API facilite le scraping de Google Hotels en gérant le rendu JavaScript, en faisant tourner les IP pour éviter les blocages, en extrayant les données rapidement et de manière fiable et en proposant des options de requête personnalisées pour imiter les utilisateurs réels.

Crawlbase Bibliothèque Python

Pour rendre cela encore plus facile, Crawlbase fournit une Librairie Python pour interagir avec le Crawling API. Tout ce dont vous avez besoin est un Crawlbase jeton d'accès, que vous obtenez après votre inscription (nous offrons 1,000 XNUMX demandes gratuites sans avoir besoin de carte de crédit).

Voici un exemple de base :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
à partir de base d'exploration importer API d'exploration

# Initialiser Crawlbase API avec votre jeton d'accès
crawling_api = API d'exploration({ 'jeton': 'VOTRE_JETON_CRAWLBASE' })

def créer_une_requête_crawlbase(url):
réponse = crawling_api.get(url)

if réponse['en-têtes']['pc_status']== «200 ':
html_content = réponse['corps'].décoder(« utf-8 »)
retourner contenu_html
d'autre:
impression(f"Échec de la récupération de la page. Code d'état : {réponse['en-têtes']['pc_status']}")
retourner Aucun

Grâce à cette configuration, vous serez prêt à extraire les fiches et les informations des hôtels de Google Hôtels. Dans la section suivante, nous allons configurer l'environnement Python pour commencer le scraping.

Configuration de votre environnement Python

Avant de récupérer les données de Google Hotels, vous devez préparer votre environnement Python. Cela comprend l'installation de Python et de quelques bibliothèques essentielles pour l'envoi de requêtes et l'extraction de données.

🐍 Installer Python

Si vous n'avez pas encore installé Python, téléchargez et installez la dernière version à partir du site officiel Python. Lors de l'installation, assurez-vous de cocher la case indiquant «Ajouter Python à PATH« — cela vous permettra d’exécuter Python à partir de la ligne de commande.

Pour vérifier si Python est installé, exécutez ceci dans votre terminal ou votre invite de commande :

1
python --version

Vous devriez voir le numéro de version installée.

✅ Installer les bibliothèques requises

Pour récupérer les données de Google Hotels, nous utiliserons :

  • carwlbase – pour envoyer des requêtes HTTP, utilisez Crawlbase Crawling API.
  • beautifulsoup4 – pour analyser et extraire le contenu du HTML.

Installez-les en utilisant pip :

1
2
demandes d'installation pip
pip installer beautifulsoup4

📝 Créez votre fichier Python

Créez de nouveaux fichiers dans lesquels vous écrirez votre code de scraping, par exemple :

1
2
-nous google_hotels_listing_scraper.py
-nous google_hotel_details_scraper.py

Ou créez-les simplement manuellement dans votre éditeur de code préféré.

🔑 Obtenez votre Crawlbase Token

Si vous ne l'avez pas déjà fait, inscrivez-vous sur Crawlbase et obtenez votre jeton API. Vous en aurez besoin pour authentifier vos requêtes de scraping.

1
2
3
4
à partir de base d'exploration importer API d'exploration

# Remplacez CRAWLBSE_JS_TOKEN par votre jeton réel.
crawling_api = API d'exploration({ 'jeton': 'CRAWLBASE_JS_TOKEN' })

Remarque: Crawlbase Il propose deux types de jetons : un jeton standard pour les sites statiques et un jeton JS pour les sites rendus en JavaScript. Pour le scraping de Google Hôtels, nous avons besoin d'un jeton JS. Consultez la section Documentation pour plus d'information.

Votre configuration est maintenant terminée. Nous allons maintenant inspecter la structure HTML de Google Hôtels et commencer à écrire le scraper.

Extraction des résultats de recherche Google Hotels

Dans cette section, nous allons extraire les listes d'hôtels de Google Hotels à l'aide de Python, BeautifulSoup et Crawlbase Crawling APIVous apprendrez à extraire les détails de l'hôtel, à gérer la pagination et à enregistrer les données dans un fichier JSON.

🧩 Inspection du HTML pour les sélecteurs

Tout d'abord, ouvrir Hôtels Google dans votre navigateur, recherchez un emplacement (par exemple, « New York ») et inspectez la page.

Capture d'écran de l'inspection HTML des résultats de recherche Google Hotels

Voici quelques classes CSS clés utilisées dans les listes d'hôtels :

  • Carte de l'hôtel :div.BcKagd
  • Nom de l'hôtel : h2.BgYkof
  • Prix: span.qQOQpe.prxS3d
  • Évaluation: span.KFi5wf.lA0BZ

Nous utiliserons ces sélecteurs dans notre scraper.

🧪 Rédaction du scraper de listes d'hôtels

Maintenant, écrivons une fonction pour extraire les données de l'hôtel en utilisant Crawlbase et BeautifulSoup.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
à partir de base d'exploration importer API d'exploration
à partir de bs4 importer BeautifulSoup
importer json

crawling_api = API d'exploration({ 'jeton': 'CRAWLBASE_JS_TOKEN' })

def créer_une_requête_crawlbase(url):
réponse = crawling_api.get(url)
if réponse['en-têtes']['pc_status']== «200 ':
retourner réponse['corps'].décoder(« utf-8 »)
retourner Aucun

def analyser_listes_d'hôtels(html):
soupe = BeautifulSoup(html, « Parseur HTML »)
hotel_data = []

hôtels = soup.find_all("div", classe_="BcKagd")
pour l'hôtel in hôtels:
nom = hôtel.find("h2", classe_="BgYkof")
prix = hôtel.find("portée", classe_="qQOQpe prxS3d")
note = hôtel.find("portée", classe_="KFi5wf lA0BZ")
lien = hotel.find("une", classe_=« PVOOXe »)

hotel_data.append({
"prénom": nom.texte if Le nom d'autre "N / A",
"prix": prix.texte if prix d'autre "N / A",
"notation": évaluation.texte if clients d'autre "N / A",
"lien": "https://www.google.com" + lien[href] if lien d'autre "N / A"
})

retourner données_hôtel

🔁 Gestion de la pagination

Google Hôtels affiche davantage de résultats sur plusieurs pages. Crawlbase Crawling API, nous pouvons simuler des clics sur des boutons avec le css_click_selector paramètre. Nous pouvons également utiliser le ajax_wait paramètre pour garantir que le contenu est entièrement chargé après le clic. Cela garantit Crawling API renvoie le code HTML complet de la page suivante après avoir cliqué sur le bouton et le contenu est rendu.

Mettons à jour notre make_crawlbase_request fonction permettant d'inclure ces paramètres et d'ajouter la gestion des exceptions pour une meilleure fiabilité :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def créer_une_requête_crawlbase(url, css_click_element=Aucun):
Essai:
options = {}

if css_click_element:
options['css_click_selector'] = css_click_element
options['ajax_wait'🇧🇷 'vrai'

réponse = crawling_api.get(url, options)
if réponse['en-têtes'].obtenir('pc_status') == «200 ':
retourner réponse['corps'].décoder(« utf-8 »)

retourner à un besoin identifié

sauf Exception as e:
impression(f"Erreur lors de Crawlbase demande: {e}")
retourner {}

💾 Enregistrement des données dans un fichier JSON

Une fois que vous avez collecté toutes les données de l'hôtel, enregistrez-les dans un fichier JSON :

1
2
3
def enregistrer_dans_json(données, nom de fichier="google_hotels.json"):
avec ouvert(nom de fichier, "w", encodage="utf-8") as f:
json.dump(données, f, ensure_ascii=Faux, retrait=2)

✅ Exemple de code complet

Voici le code complet qui combine toutes les étapes ci-dessus :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
à partir de base d'exploration importer API d'exploration
à partir de bs4 importer BeautifulSoup
importer json

crawling_api = API d'exploration({ 'jeton': 'CRAWLBASE_JS_TOKEN' })

def créer_une_requête_crawlbase(url, css_click_element=Aucun):
Essai:
options = {}

if css_click_element:
options['css_click_selector'] = css_click_element
options['ajax_wait'🇧🇷 'vrai'

réponse = crawling_api.get(url, options)
if réponse['en-têtes'].obtenir('pc_status') == «200 ':
retourner réponse['corps'].décoder(« utf-8 »)

retourner à un besoin identifié

sauf Exception as e:
impression(f"Erreur lors de Crawlbase demande: {e}")
retourner {}

def analyser_listes_d'hôtels(html):
soupe = BeautifulSoup(html, « Parseur HTML »)
hotel_data = []

hôtels = soup.find_all("div", classe_="BcKagd")
pour l'hôtel in hôtels:
nom = hôtel.find("h2", classe_="BgYkof")
prix = hôtel.find("portée", classe_="qQOQpe prxS3d")
note = hôtel.find("portée", classe_="KFi5wf lA0BZ")
lien = hotel.find("une", classe_=« PVOOXe »)

hotel_data.append({
"prénom": nom.texte if Le nom d'autre "N / A",
"prix": prix.texte if prix d'autre "N / A",
"notation": évaluation.texte if clients d'autre "N / A",
"lien": "https://www.google.com" + lien[href] if lien d'autre "N / A"
})

retourner données_hôtel

def enregistrer_dans_json(données, nom de fichier="google_hotels.json"):
avec ouvert(nom de fichier, "w", encodage="utf-8") as f:
json.dump(données, f, ensure_ascii=Faux, retrait=2)

def principal
URL = "https://www.google.com/travel/hotels/New-York?q=New+York¤cy=USD"
all_hotels = []
max_pages = 2
nombre_de_pages = 0

tout en nombre_de_pages < nombre_max :
html = ''

if nombre_de_pages == 0:
# Pour la 1ère page
html = make_crawlbase_request(url)
d'autre:
# Pour les pages suivantes
html = make_crawlbase_request(url, 'bouton[jsname="OCpkoe"]')

if pas html :
pause

hôtels = parse_hotel_listings(html)
all_hotels.extend(hôtels)

nombre_de_pages += 1

save_to_json(tous_les_hôtels)
impression(f"Gratté {len(tous_les_hôtels)} hôtels et enregistrés dans google_hotels.json")

if __nom__ == "__principale__":
principale()

Exemple de sortie :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[
{
"prénom": « Hôtel 31 Street Broadway »,
"prix": «$ 59»,
"notation": "2.5",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MihDaG9JeFBLSXpvWDR6SWZMQVJvTkwyY3ZNVEZ3ZDJnMU4yYzFOUkFCOAA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxA-&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
{
"prénom": « L'hôtel-boutique One »,
"prix": «$ 90»,
"notation": "3.3",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MidDaGtJZ0t6dDBjdkZ6dG1jQVJvTUwyY3ZNWEUxWW14eWF6a3pFQUU4AA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxBV&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
{
"prénom": "Ly New York Hotel",
"prix": «$ 153»,
"notation": "4.4",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MihDaG9JbU9UeXpldUN6cnlrQVJvTkwyY3ZNVEYyY0d3MGJuSXpZaEFCOAA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxBu&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
{
"prénom": « King Hotel Brooklyn Sunset Park »,
"prix": «$ 75»,
"notation": "3.4",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MihDaG9JbllMLW1iTG5uLTNDQVJvTkwyY3ZNVEZ5ZDNKNWQyUXdiQkFCOAA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegUIAxCJAQ&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
{
"prénom": "Aman New York",
"prix": «$ 2,200»,
"notation": "4.4",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MidDaGtJc3Q3dF80YmhzWW9ZR2cwdlp5OHhNV1kyTW1Sd2VIbHNFQUU4AA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegUIAxCiAQ&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
.... plus
]

Maintenant que nous avons extrait les listes d'hôtels des résultats de recherche, l'étape suivante consiste à extraire les détails des pages d'hôtel individuelles.

Extraction des détails individuels de l'hôtel

Une fois que nous disposons d'une liste de liens vers des hôtels issus des résultats de recherche, nous pouvons consulter la page de chaque hôtel pour en extraire davantage d'informations, comme l'adresse complète, le numéro de téléphone et des caractéristiques supplémentaires. Cela nous permet de mieux comprendre l'établissement et est utile pour l'analyse de la concurrence, le suivi des prix ou la création d'applications de voyage.

🔍 Inspection du code HTML pour les détails de l'hôtel

Ouvrez un lien d'hôtel dans votre navigateur et utilisez l'outil Inspecter de votre navigateur pour trouver des sélecteurs pour les champs importants :

Capture d'écran de l'inspection HTML des détails individuels des hôtels de Google
  • Nom de l'hôtel : Trouvé dans un <h1> tag avec classe FNkAEc.
  • Prix ​​: Situé dans un <span> balise avec classes qQOQpe prxS3d.
  • Note : Extrait d'un <span> avec cours KFi5wf lA0BZ.
  • Nombre d'avis : Trouvé dans un <span> avec cours jdzyld XLC8M, à côté de la note.
  • Type d'hôtel : Trouvé dans un <span> avec classe CFH2De.
  • Adresse et contact : Situé à l'intérieur d'un div avec classe K4nuhf, où:
  • spans[0] donne l'adresse
  • spans[2] donne les coordonnées

Remarque: Ces sélecteurs peuvent varier selon l'emplacement et la disposition. Vérifiez-les toujours dans votre navigateur avant de les récupérer.

🧰 Rédaction du Scraper de détails

En utilisant les sélecteurs CSS identifiés, créons un Google Hotel Details Scraper à l'aide de BeautifulSoup.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
à partir de base d'exploration importer API d'exploration
à partir de bs4 importer BeautifulSoup
importer json

crawling_api = API d'exploration({ 'jeton': 'CRAWLBASE_JS_TOKEN' })

def créer_une_requête_crawlbase(url):
réponse = crawling_api.get(url)
if réponse['en-têtes']['pc_status']== «200 ':
retourner réponse['corps'].décoder(« utf-8 »)
retourner Aucun

def analyser_les_détails_de_l'hôtel(hôtel_url):
html = make_crawlbase_request(hotel_url)
if pas html :
retourner Aucun

soupe = BeautifulSoup(html, « Parseur HTML »)

nom = soup.find("h1", classe_=« FNkAEc »)
prix = soupe.find("portée", classe_="qQOQpe prxS3d")
note = soup.find("portée", classe_="KFi5wf lA0BZ")
critiques = soup.find("portée", classe_=« jdzyld XLC8M »)
hotel_type = soup.find("portée", classe_="CFH2De")

adresse = "N / A"
contact = "N / A"

location_section = soup.find_all("div", classe_="K4nuhf")
if emplacement_section:
spans = location_section[0].find_all("portée")
if len(envergures) >= 3:
adresse = spans[0].texte
contact = portées[2].texte

retourner {
"prénom": nom.texte if Le nom d'autre "N / A",
"prix": prix.texte if prix d'autre "N / A",
"notation": évaluation.texte if clients d'autre "N / A",
"no_of_reviews": avis.texte if Avis Client d'autre "N / A",
"type_hôtel":hotel_type.text if type_hôtel d'autre "N / A",
"adresse": adresse,
"contact": contact,
"lien": hôtel_url
}

💾 Enregistrer les détails de l'hôtel au format JSON

Vous pouvez collecter les données détaillées de l'hôtel dans une liste et l'enregistrer comme les annonces.

1
2
3
def enregistrer_données_détaillées(détails_de_l'hôtel, nom_de_fichier="google_hotel_details.json"):
avec ouvert(nom de fichier, "w", encodage="utf-8") as f:
json.dump(hotel_details, f, ensure_ascii=Faux, retrait=2)

🧩 Exemple de code complet

Voici comment vous pouvez parcourir la liste des liens d'hôtels et extraire tous les détails de chacun :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
à partir de base d'exploration importer API d'exploration
à partir de bs4 importer BeautifulSoup
importer json

crawling_api = API d'exploration({ 'jeton': 'CRAWLBASE_JS_TOKEN' })

def créer_une_requête_crawlbase(url):
réponse = crawling_api.get(url)
if réponse['en-têtes']['pc_status']== «200 ':
retourner réponse['corps'].décoder(« utf-8 »)
retourner Aucun

def analyser_les_détails_de_l'hôtel(hôtel_url):
html = make_crawlbase_request(hotel_url)
if pas html :
retourner Aucun

soupe = BeautifulSoup(html, « Parseur HTML »)

nom = soup.find("h1", classe_=« FNkAEc »)
prix = soupe.find("portée", classe_="qQOQpe prxS3d")
note = soup.find("portée", classe_="KFi5wf lA0BZ")
critiques = soup.find("portée", classe_=« jdzyld XLC8M »)
hotel_type = soup.find("portée", classe_="CFH2De")

adresse = "N / A"
contact = "N / A"

location_section = soup.find_all("div", classe_="K4nuhf")
if emplacement_section:
spans = location_section[0].find_all("portée")
if len(envergures) >= 3:
adresse = spans[0].texte
contact = portées[2].texte

retourner {
"prénom": nom.texte if Le nom d'autre "N / A",
"prix": prix.texte if prix d'autre "N / A",
"notation": évaluation.texte if clients d'autre "N / A",
"no_of_reviews": avis.texte if Avis Client d'autre "N / A",
"type_hôtel":hotel_type.text if type_hôtel d'autre "N / A",
"adresse": adresse,
"contact": contact,
"lien": hôtel_url
}

def enregistrer_données_détaillées(détails_de_l'hôtel, nom_de_fichier="google_hotel_details.json"):
avec ouvert(nom de fichier, "w", encodage="utf-8") as f:
json.dump(hotel_details, f, ensure_ascii=Faux, retrait=2)

def principal
# Exemple de liste d'entrée à partir du scraper de listes
hotel_links = [
"https://www.google.com/travel/search?q=New%20York&qs=MihDaG9JeFBLSXpvWDR6SWZMQVJvTkwyY3ZNVEZ3ZDJnMU4yYzFOUkFCOAA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxA-&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE",
"https://www.google.com/travel/search?q=New%20York&qs=MidDaGtJZ0t6dDBjdkZ6dG1jQVJvTUwyY3ZNWEUxWW14eWF6a3pFQUU4AA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxBV&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
]

detailed_hotels = []

pour url in liens_hôtels:
données = parse_hotel_details(url)
if données:
detailed_hotels.append(données)

save_detailed_data(hôtels_détaillés)
impression(f"Détails enregistrés de {len(hôtels_détaillés)} hôtels sur google_hotel_details.json")

if __nom__ == "__principale__":
principale()

Exemple de sortie :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
{
"prénom": « Hôtel 31 Street Broadway »,
"prix": «$ 59»,
"notation": "3.8",
"no_of_reviews": " (461)",
"type_hôtel": "Hôtel 2 étoiles",
"adresse": 38 W 31st St #110, New York, NY 10001,
"contact": "(516) 770-8751",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MihDaG9JeFBLSXpvWDR6SWZMQVJvTkwyY3ZNVEZ3ZDJnMU4yYzFOUkFCOAA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxA-&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
},
{
"prénom": « L'hôtel-boutique One »,
"prix": «$ 90»,
"notation": "4.5",
"no_of_reviews": " (1.2K)",
"type_hôtel": "Hôtel 3 étoiles",
"adresse": 137-72 Northern Blvd, Flushing, NY 11354,
"contact": "(718) 886-3555",
"lien": "https://www.google.com/travel/search?q=New%20York&qs=MidDaGtJZ0t6dDBjdkZ6dG1jQVJvTUwyY3ZNWEUxWW14eWF6a3pFQUU4AA&currency=USD&ved=2ahUKEwiY1rucg9CMAxUIAPkAHXyaE5EQyvcEegQIAxBV&ap=KigKEgm4tF8JXhxEQBF5jsg3iI5SwBISCfZ7hYTLm0RAEXmOyLfKcVLA&ts=CAESCgoCCAMKAggDEAAaXAo-EjwKCS9tLzAyXzI4NjIlMHg4OWMyNGZhNWQzM2YwODNiOjB4YzgwYjhmMDZlMTc3ZmU2MjoITmV3IFlvcmsSGhIUCgcI6Q8QBBgQEgcI6Q8QBBgRGAEyAhAAKgcKBToDVVNE"
}
]

Réflexions finales

Le scraping de Google Hôtels vous permet de collecter des données précieuses telles que les noms d'hôtels, les prix, les avis, les notes, les adresses et les coordonnées. Ces données sont précieuses pour la recherche de voyages, la création d'outils de comparaison d'hôtels ou le suivi des tendances du marché.

Le Crawlbase Crawling API Facilite l'extraction de contenu dynamique tout en évitant les blocages et les CAPTCHA. En combinant BeautifulSoup pour l'analyse et JSON pour la sauvegarde des données, vous pouvez créer un scraper simple et puissant en Python.

Lorsque vous récupérez les données de l'hôtel, suivez toujours les meilleures pratiques éthiques et légales pour garantir la sécurité et la conformité de vos projets.

Vous souhaitez scraper davantage de plateformes ? Consultez nos autres guides de scraping :

(I.e. Comment récupérer des fonds de Google Finance
(I.e. Comment récupérer des informations sur Google News
(I.e. Comment récupérer les résultats de Google Scholar
(I.e. Comment récupérer les résultats de recherche Google
(I.e. Comment récupérer des données Google Shopping

Si vous avez des questions, des idées ou besoin d'aide, notre équipe est là pour vous. Merci de votre lecture et bon scraping !

Foire aux questions (FAQ)

Le scraping de données publiques sur des sites web comme Google Hotels peut être légal s'il est effectué de manière éthique et dans le respect des conditions d'utilisation du site. Évitez systématiquement de collecter des données personnelles et veillez à respecter les lois locales sur la confidentialité des données et les réglementations en matière de scraping.

Q. Pourquoi utiliser le Crawlbase Crawling API pour récupérer Google Hotels ?

Le contenu de Google Hotels est chargé dynamiquement à l'aide de JavaScript, ce qui peut être difficile à extraire avec des outils classiques. Crawlbase Crawling API charge le HTML complet comme un vrai navigateur et gère JavaScript, la pagination, les CAPTCHA et la rotation IP, ce qui rend votre scraping plus rapide, plus facile et plus fiable.

Q. Quelles données puis-je extraire de Google Hotels ?

Vous pouvez extraire le nom, le prix, l'adresse, la note, le nombre d'avis, le type d'hôtel et les coordonnées de l'hôtel. Ces informations sont utiles pour l'analyse hôtelière, le suivi des prix, les études de marché et les applications de voyage.