TripAdvisor è un portale di viaggi molto utilizzato in cui gli utenti scrivono recensioni su alloggi, ristoranti, visite turistiche, ecc. Arricchire i dati con le recensioni di TripAdvisor può essere utile per l'analisi dei viaggi, gli studi sulla concorrenza, ecc. In questa guida spiegheremo come estrarre i dati di TripAdvisor utilizzando Python e come memorizzare i dati in formato csv.
Per costruire questo scraper, utilizzeremo le seguenti librerie Python:
Installare le librerie necessarie usando pip:
pip install requests lxml
Quando si effettua lo scraping di dati da siti web come TripAdvisor, è fondamentale configurare correttamente le intestazioni delle richieste, in particolare l'User-Agent. Impostando questa intestazione, è possibile mascherare le richieste come se provenissero da utenti legittimi, riducendo così al minimo il rischio che le attività di scraping provochino blocchi dovuti a modelli di traffico insoliti. Inoltre, l'utilizzo di server proxy è essenziale per aggirare le restrizioni relative al numero di richieste consentite da un singolo indirizzo IP, facilitando così una raccolta di dati più estesa.
Esamineremo il processo di scraping di un elenco di pagine di hotel, estrarne i dettagli e salvarli in un file CSV. Analizziamo ogni parte.
Per iniziare, importare le librerie necessarie:
import requests
from lxml.html import fromstring
import csv
Quindi, definire un elenco di URL per le pagine dell'hotel da cui si intende effettuare lo scraping dei dati:
urls_list = [
'Https link',
'Https link'
]
Per garantire che le richieste imitino quelle di un browser reale, è fondamentale configurare correttamente le intestazioni. Questo passo aiuta a bypassare i sistemi di protezione anti-bot dei siti web e riduce al minimo il rischio di essere bloccati.
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',
}
I proxy possono aiutare a bypassare le restrizioni basate sull'IP. Nell'esempio seguente, si utilizza un proxy con autenticazione dell'indirizzo IP. Ecco come aggiungere un proxy alle richieste.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Per ogni URL, inviare una richiesta e analizzare l'HTML della risposta:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Aggiungere proxies=proxies se necessario
parser = fromstring(response.text)
Utilizzando XPath, possiamo puntare a elementi specifici della pagina:
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')
Memorizzare le informazioni estratte in un dizionario e aggiungerle a un elenco:
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)
Dopo lo scraping, salvare i dati in un file 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')
Questa guida non solo pone le basi tecniche per lo scraping dei dati, ma apre anche la strada a un'analisi completa del settore turistico. I metodi e le tecniche qui descritte consentono agli utenti di approfondire le tendenze del mercato e i comportamenti dei consumatori. Tali approfondimenti sono fondamentali per sviluppare solide strategie di gestione della reputazione e per condurre analisi della concorrenza. Sfruttando questa guida, gli utenti possono migliorare la loro comprensione delle dinamiche del settore turistico, rendendo possibile l'elaborazione di decisioni strategiche informate che portino al successo.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0