TripAdvisor, kullanıcıların konaklama, yemek, gezi vb. için yorum yazdığı yaygın olarak kullanılan bir seyahat portalıdır. Verilerin TripAdvisor yorumlarıyla zenginleştirilmesi Seyahat Analizi, Rakip Çalışmaları vb. için yararlı olabilir. Bu kılavuzda, TripAdvisor verilerinin python kullanılarak nasıl çıkarılabileceğini ve verilerin bir csv formatında nasıl saklanabileceğini ele alacağız.
Bu kazıyıcıyı oluşturmak için aşağıdaki Python kütüphanelerini kullanacağız:
Pip kullanarak gerekli kütüphaneleri yükleyin:
pip install requests lxml
TripAdvisor gibi web sitelerinden veri kazırken, başta User-Agent olmak üzere istek başlıklarını doğru şekilde yapılandırmak çok önemlidir. Bu başlığı ayarlayarak, taleplerinizi meşru kullanıcılardan gelen talepler gibi gösterebilirsiniz, bu da kazıma faaliyetlerinizin olağandışı trafik modelleri nedeniyle engellemeleri tetikleme riskini en aza indirir. Ayrıca, proxy sunucuları kullanmak, tek bir IP adresinden izin verilen istek sayısıyla ilgili kısıtlamaları aşmak ve böylece daha kapsamlı veri toplama çabalarını kolaylaştırmak için gereklidir.
Otel sayfalarının bir listesini kazıma, ayrıntıları çıkarma ve bunları bir CSV dosyasına kaydetme sürecinden geçeceğiz. Her bir bölümü inceleyelim.
Başlamak için gerekli kütüphaneleri içe aktarın:
import requests
from lxml.html import fromstring
import csv
Ardından, veri kazımayı planladığınız otel sayfaları için bir URL listesi tanımlayın:
urls_list = [
'Https link',
'Https link'
]
İsteklerinizin gerçek bir tarayıcıdan gelenleri taklit ettiğinden emin olmak için başlıkları doğru şekilde yapılandırmak çok önemlidir. Bu adım, web sitelerindeki anti-bot koruma sistemlerini atlatmaya yardımcı olur ve engellenme riskini en aza indirir.
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',
}
Proxy'ler IP tabanlı kısıtlamaları aşmaya yardımcı olabilir. Aşağıdaki örnekte, IP adresi kimlik doğrulamalı bir proxy kullanıyoruz. İsteklere nasıl proxy ekleneceği aşağıda açıklanmıştır.
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Her URL için bir istek gönderin ve yanıt HTML'sini ayrıştırın:
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers) # Gerekirse proxy=proxies ekleyin
parser = fromstring(response.text)
XPath kullanarak sayfadaki belirli öğeleri hedefleyebiliriz:
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')
Çıkarılan bilgileri bir sözlükte saklayın ve bir listeye ekleyin:
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)
Kazıma işleminden sonra verileri bir CSV dosyasına kaydedin:
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')
Bu kılavuz sadece veri kazıma için teknik bir temel oluşturmakla kalmıyor, aynı zamanda turizm sektöründe kapsamlı analizler için yollar açıyor. Burada detaylandırılan yöntem ve teknikler, kullanıcıların pazar trendlerini ve tüketici davranışlarını daha derinlemesine incelemelerini sağlıyor. Bu tür içgörüler, sağlam itibar yönetimi stratejileri geliştirmek ve rekabet analizleri yapmak için çok önemlidir. Kullanıcılar bu rehberden yararlanarak turizm sektöründeki dinamikleri daha iyi anlayabilir ve böylece başarıya ulaşmayı sağlayacak bilinçli ve stratejik kararlar alabilirler.
Yorumlar: 0