TripAdvisor - провідний веб-сайт для мандрівників, на якому зібрано мільйони відгуків про різноманітні точки інтересу, як-от готелі, ресторани та визначні пам'ятки. Збір даних відгуків з TripAdvisor може надати цінні інсайти для аналітики у сфері туризму, моніторингу репутації та порівняльного аналізу конкурентів. Цей посібник надасть інструкції з вилучення інформації з TripAdvisor з використанням мови програмування Python, а також зі збереження цих даних у форматі CSV для зручності подальшого аналізу.
Для реалізації скрапера, що збирає дані з TripAdvisor, необхідно використовувати такі бібліотеки Python:
Встановіть ці бібліотеки, використовуючи таку команду pip:
pip install requests lxml
Ми розглянемо процес скрапінгу списку сторінок готелів, вилучення даних і збереження їх у CSV-файл. Розберемо кожен етап по порядку.
Для початку необхідно імпортувати бібліотеки, що використовуються, і визначити список URL-адрес сторінок готелів, з яких витягуватимуть дані:
import requests
from lxml.html import fromstring
import csv
Потім, вкажіть список URL-адрес сторінок готелів, з яких будуть витягуватися дані:
urls_list = [
'Https ссылка',
'Https ссылка'
]
Для того щоб запити виглядали як запити від реального браузера, необхідно налаштувати заголовки. Це допоможе обійти системи захисту від ботів на сайтах і зменшить ризик блокування:
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',
}
Проксі можуть допомогти обійти обмеження, засновані на множинних запитах з однієї IP-адреси. У прикладі нижче ми використовуємо проксі з авторизацією за IP-адресою.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Для кожного URL відправляється запит і парситься отриманий HTML:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Додайте проксі за необхідності
parser = fromstring(response.text)
За допомогою XPath можна виділити конкретні елементи на сторінці:
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:
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 ссылка',
'Https ссылка'
]
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')
Цей посібник не тільки забезпечує технічну основу для скрапінгу даних, а й відкриває можливості для поглибленого аналізу у сфері туризму. Методи і техніки, викладені в статті, дають змогу користувачам глибше розуміти тренди ринку та поведінку споживачів, що є ключем до розроблення ефективних стратегій управління репутацією та конкурентного аналізу.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0