TripAdvisor est un portail de voyage très utilisé sur lequel les utilisateurs rédigent des avis sur l'hébergement, la restauration, les visites touristiques, etc. Enrichir les données avec des avis TripAdvisor peut s'avérer utile pour l'analyse des voyages, l'étude des concurrents, etc. Dans ce guide, nous verrons comment les données TripAdvisor peuvent être extraites en utilisant python et les données stockées dans un format csv.
Pour construire ce scraper, nous utiliserons les bibliothèques Python suivantes:
Installez les bibliothèques nécessaires à l'aide de pip:
pip install requests lxml
Lorsque vous récupérez des données sur des sites web tels que TripAdvisor, il est essentiel de configurer correctement les en-têtes de requête, en particulier l'en-tête User-Agent. En définissant cet en-tête, vous pouvez déguiser vos requêtes en requêtes provenant d'utilisateurs légitimes, ce qui minimise le risque que vos activités de scraping déclenchent des blocages en raison de modèles de trafic inhabituels. En outre, l'utilisation de serveurs proxy est essentielle pour contourner les restrictions liées au nombre de requêtes autorisées à partir d'une seule adresse IP, ce qui facilite les efforts de collecte de données plus importants.
Nous allons voir comment récupérer une liste de pages d'hôtels, en extraire les détails et les enregistrer dans un fichier CSV. Décortiquons chaque partie.
Pour commencer, importez les bibliothèques nécessaires:
import requests
from lxml.html import fromstring
import csv
Définissez ensuite une liste d'URL pour les pages de l'hôtel dont vous souhaitez extraire des données:
urls_list = [
'Https link',
'Https link'
]
Pour que vos requêtes imitent celles d'un véritable navigateur, il est essentiel de configurer correctement les en-têtes. Cette étape permet de contourner les systèmes de protection anti-bot des sites web et de minimiser le risque d'être bloqué.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
Les proxy peuvent aider à contourner les restrictions basées sur l'adresse IP. Dans l'exemple ci-dessous, nous utilisons un proxy avec authentification de l'adresse IP. Voici comment ajouter un proxy aux requêtes.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Pour chaque URL, envoyez une requête et analysez le code HTML de la réponse:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Ajouter proxies=proxies si nécessaire
parser = fromstring(response.text)
En utilisant XPath, nous pouvons cibler des éléments spécifiques sur la page:
title = parser.xpath('//h1[@data-automation="mainH1"]/text()')[0]
about = parser.xpath('//div[@class="_T FKffI bmUTE"]/div/div/text()')[0].strip()
images_url = parser.xpath('//div[@data-testid="media_window_test"]/div/div/button/picture/source/@srcset')
price = parser.xpath('//div[@data-automation="commerce_module_visible_price"]/text()')[0]
ratings = parser.xpath('//div[@class="jVDab W f u w GOdjs"]/@aria-label')[0].split(' ')[0]
features = parser.xpath('//div[@class="f Q2 _Y tyUdl"]/div[2]/span/span/span/text()')
reviews = parser.xpath('//span[@class="JguWG"]/span//text()')
listing_by = parser.xpath('//div[@class="biGQs _P pZUbB KxBGd"]/text()')[0]
similar_experiences = parser.xpath('//div[@data-automation="shelfCard"]/a/@href')
Stocker les informations extraites dans un dictionnaire et les ajouter à une liste:
data = {
'title': title,
'about': about,
'price': price,
'listing by': listing_by,
'ratings': ratings,
'image_urls': images_url,
'features': features,
'reviews': reviews,
'similar_experiences': similar_experiences
}
extracted_data.append(data)
Après le scraping, enregistrez les données dans un fichier CSV:
csv_columns = ['title', 'about', 'price', 'listing by', 'ratings', 'image_urls', 'features', 'reviews', 'similar_experiences']
with open("tripadvisor_data.csv", 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in extracted_data:
writer.writerow(data)
import requests
from lxml.html import fromstring
import csv
urls_list = [
'Https link',
'Https link'
]
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers, proxies=proxies)
parser = fromstring(response.text)
title = parser.xpath('//h1[@data-automation="mainH1"]/text()')[0]
about = parser.xpath('//div[@class="_T FKffI bmUTE"]/div/div/text()')[0].strip()
images_url = parser.xpath('//div[@data-testid="media_window_test"]/div/div/button/picture/source/@srcset')
price = parser.xpath('//div[@data-automation="commerce_module_visible_price"]/text()')[0]
ratings = parser.xpath('//div[@class="jVDab W f u w GOdjs"]/@aria-label')[0].split(' ')[0]
features = parser.xpath('//div[@class="f Q2 _Y tyUdl"]/div[2]/span/span/span/text()')
reviews = parser.xpath('//span[@class="JguWG"]/span//text()')
listing_by = parser.xpath('//div[@class="biGQs _P pZUbB KxBGd"]/text()')[0]
similar_experiences = parser.xpath('//div[@data-automation="shelfCard"]/a/@href')
data = {
'title': title,
'about': about,
'price': price,
'listing by': listing_by,
'ratings': ratings,
'image_urls': images_url,
'features': features,
'reviews': reviews,
'similar_experiences': similar_experiences
}
extracted_data.append(data)
csv_columns = ['title', 'about', 'price', 'listing by', 'ratings', 'image_urls', 'features', 'reviews', 'similar_experiences']
with open("tripadvisor_data.csv", 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in extracted_data:
writer.writerow(data)
print('saved into tripadvisor_data.csv')
Ce guide ne se contente pas de poser les bases techniques du scraping de données, il ouvre également la voie à des analyses approfondies dans le secteur du tourisme. Les méthodes et techniques détaillées ici permettent aux utilisateurs d'approfondir les tendances du marché et les comportements des consommateurs. Ces informations sont cruciales pour développer des stratégies solides de gestion de la réputation et mener des analyses concurrentielles. En s'appuyant sur ce guide, les utilisateurs peuvent améliorer leur compréhension de la dynamique de l'industrie du tourisme, ce qui leur permet de prendre des décisions stratégiques éclairées qui mènent au succès.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0