Come raschiare i dati di TripAdvisor usando Python

Commenti: 0

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.

Installazione delle librerie necessarie

Per costruire questo scraper, utilizzeremo le seguenti librerie Python:

  • requests: Per effettuare richieste HTTP per ottenere il contenuto della pagina.
  • lxml: Per analizzare il contenuto HTML ed estrarre gli elementi con XPath.

Installare le librerie necessarie usando pip:


pip install requests lxml

Il ruolo delle intestazioni e dei proxy per un efficace scraping dei dati

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.

Guida passo-passo allo scraping di TripAdvisor

Esamineremo il processo di scraping di un elenco di pagine di hotel, estrarne i dettagli e salvarli in un file CSV. Analizziamo ogni parte.

Passo 1. Importare le librerie e impostare gli URL

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'
]

Passo 2. Impostazione delle intestazioni per le richieste

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',
}

Passo 3. Utilizzo dei proxy

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)

Passo 4. Invio delle richieste e analisi dell'HTML

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)

Passo 5. Estrazione dei dati con XPath

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')

Passo 6. Memorizzazione dei dati estratti

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)

Passo 7. Salvataggio dei dati in CSV

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)

Codice completo


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.

Commenti:

0 Commenti