Wie man TripAdvisor-Daten mit Python ausliest

Bemerkungen: 0

TripAdvisor ist ein weit verbreitetes Reiseportal, auf dem Nutzer Bewertungen für Unterkünfte, Restaurants, Sehenswürdigkeiten usw. abgeben. Die Anreicherung der Daten mit TripAdvisor-Bewertungen kann für Reiseanalysen, Wettbewerbsstudien usw. hilfreich sein. In diesem Leitfaden wird beschrieben, wie TripAdvisor-Daten mit Python extrahiert und im csv-Format gespeichert werden können.

Installation der erforderlichen Bibliotheken

Um diesen Scraper zu erstellen, werden wir die folgenden Python-Bibliotheken verwenden:

  • requests: Für HTTP-Anfragen zum Abrufen von Seiteninhalten.
  • lxml: Zum Parsen von HTML-Inhalten und Extrahieren von Elementen mit XPath.

Installieren Sie die erforderlichen Bibliotheken mit pip:


pip install requests lxml

Die Rolle von Kopfzeilen und Proxys beim effektiven Scraping von Daten

Beim Scraping von Daten von Websites wie TripAdvisor ist es wichtig, die Request-Header richtig zu konfigurieren, insbesondere den User-Agent. Durch die Einstellung dieses Headers können Sie Ihre Anfragen als die von legitimen Nutzern stammenden Anfragen tarnen, wodurch das Risiko minimiert wird, dass Ihre Scraping-Aktivitäten aufgrund ungewöhnlicher Verkehrsmuster Sperren auslösen. Darüber hinaus ist der Einsatz von Proxy-Servern unerlässlich, um Beschränkungen in Bezug auf die Anzahl der zulässigen Anfragen von einer einzigen IP-Adresse zu umgehen und so eine umfangreichere Datenerfassung zu ermöglichen.

Schritt-für-Schritt-Anleitung zum Scrapen von TripAdvisor

Wir gehen den Prozess des Scrapens einer Liste von Hotelseiten durch, extrahieren Details und speichern sie in einer CSV-Datei. Lassen Sie uns jeden Teil aufschlüsseln.

Schritt 1. Bibliotheken importieren und URLs einrichten

Importieren Sie zunächst die erforderlichen Bibliotheken:


import requests
from lxml.html import fromstring
import csv

Definieren Sie dann eine Liste von URLs für die Hotelseiten, von denen Sie Daten abrufen möchten:


urls_list = [
    'Https link',
    'Https link'
]

Schritt 2. Kopfzeilen für Anfragen festlegen

Um sicherzustellen, dass Ihre Anfragen die eines echten Browsers imitieren, ist es wichtig, die Kopfzeilen richtig zu konfigurieren. Dieser Schritt hilft dabei, Anti-Bot-Schutzsysteme auf Websites zu umgehen und das Risiko, blockiert zu werden, zu minimieren.


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

Schritt 3. Verwendung von Proxys

Proxys können helfen, IP-basierte Beschränkungen zu umgehen. Im folgenden Beispiel verwenden wir einen Proxy mit IP-Adressauthentifizierung. So fügen Sie einen Proxy zu Anfragen hinzu.


proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)

Schritt 4. Senden von Anfragen und Parsen des HTML

Senden Sie für jede URL eine Anfrage und analysieren Sie die HTML-Antwort:


extracted_data = []
for url in urls_list:
    response = requests.get(url, headers=headers)  # Proxies=proxies hinzufügen, falls erforderlich
    parser = fromstring(response.text)

Schritt 5. Extrahieren von Daten mit XPath

Mit XPath können wir bestimmte Elemente auf der Seite anvisieren:


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

Schritt 6. Extrahierte Daten speichern

Speichern Sie die extrahierten Informationen in einem Wörterbuch und hängen Sie sie an eine Liste an:


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)

Schritt 7. Speichern der Daten in CSV

Nach dem Scraping speichern Sie die Daten in einer CSV-Datei:


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)

Vollständiger Code


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

Dieser Leitfaden schafft nicht nur eine technische Grundlage für Data Scraping, sondern eröffnet auch Möglichkeiten für umfassende Analysen im Tourismussektor. Die hier beschriebenen Methoden und Techniken ermöglichen es den Nutzern, Markttrends und Verbraucherverhalten tiefer zu erforschen. Solche Einblicke sind für die Entwicklung robuster Reputationsmanagementstrategien und die Durchführung von Wettbewerbsanalysen von entscheidender Bedeutung. Mit Hilfe dieses Leitfadens können die Nutzer ihr Verständnis für die Dynamik in der Tourismusbranche verbessern und so fundierte, strategische Entscheidungen treffen, die zum Erfolg führen.

Bemerkungen:

0 Bemerkungen