TripAdvisor to powszechnie używany portal turystyczny, w którym użytkownicy piszą recenzje dotyczące zakwaterowania, restauracji, zwiedzania itp. Wzbogacenie danych o recenzje TripAdvisor może być pomocne w analizie podróży, badaniach konkurencji itp. W tym przewodniku omówimy, w jaki sposób można wyodrębnić dane TripAdvisor za pomocą Pythona i zapisać je w formacie csv.
Aby zbudować ten scraper, użyjemy następujących bibliotek Pythona:
Zainstaluj wymagane biblioteki za pomocą pip:
pip install requests lxml
Podczas skrobania danych z witryn takich jak TripAdvisor kluczowe znaczenie ma prawidłowe skonfigurowanie nagłówków żądań, zwłaszcza User-Agent. Ustawiając ten nagłówek, można ukryć swoje żądania jako pochodzące od legalnych użytkowników, co minimalizuje ryzyko, że działania związane ze skrobaniem spowodują blokady z powodu nietypowych wzorców ruchu. Ponadto korzystanie z serwerów proxy jest niezbędne do obejścia ograniczeń związanych z liczbą żądań dozwolonych z jednego adresu IP, ułatwiając w ten sposób bardziej rozległe gromadzenie danych.
Przejdziemy przez proces skrobania listy stron hoteli, wyodrębniania szczegółów i zapisywania ich w pliku CSV. Podzielmy się na poszczególne części.
Aby rozpocząć, zaimportuj niezbędne biblioteki:
import requests
from lxml.html import fromstring
import csv
Następnie zdefiniuj listę adresów URL stron hoteli, z których zamierzasz pobierać dane:
urls_list = [
'Https link',
'Https link'
]
Aby upewnić się, że żądania naśladują te z prawdziwej przeglądarki, kluczowe jest prawidłowe skonfigurowanie nagłówków. Ten krok pomaga ominąć systemy ochrony przed botami na stronach internetowych i minimalizuje ryzyko zablokowania.
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',
}
Serwery proxy mogą pomóc ominąć ograniczenia oparte na adresie IP. W poniższym przykładzie używamy serwera proxy z uwierzytelnianiem adresu IP. Oto jak dodać serwer proxy do żądań.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Dla każdego adresu URL wyślij żądanie i przeanalizuj HTML odpowiedzi:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # W razie potrzeby dodaj proxy=proxy
parser = fromstring(response.text)
Używając XPath, możemy kierować się na konkretne elementy na stronie:
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')
Przechowuje wyodrębnione informacje w słowniku i dołącza je do listy:
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)
Po skrobaniu zapisz dane w pliku 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')
Niniejszy przewodnik nie tylko kładzie techniczne podwaliny pod skrobanie danych, ale także otwiera możliwości kompleksowej analizy w sektorze turystycznym. Opisane tu metody i techniki pozwalają użytkownikom zagłębić się w trendy rynkowe i zachowania konsumentów. Takie spostrzeżenia są kluczowe dla opracowania solidnych strategii zarządzania reputacją i przeprowadzania analiz konkurencji. Korzystając z tego przewodnika, użytkownicy mogą lepiej zrozumieć dynamikę branży turystycznej, umożliwiając podejmowanie świadomych, strategicznych decyzji, które napędzają sukces.
Komentarze: 0