Python kullanarak TripAdvisor verileri nasıl kazınır?

Yorumlar: 0

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.

Gerekli kütüphanelerin kurulumu

Bu kazıyıcıyı oluşturmak için aşağıdaki Python kütüphanelerini kullanacağız:

  • requests: Sayfa içeriğini almak için HTTP istekleri yapmak için.
  • lxml: HTML içeriğini ayrıştırmak ve XPath ile öğeleri ayıklamak için.

Pip kullanarak gerekli kütüphaneleri yükleyin:


pip install requests lxml

Etkili veri kazımada başlıkların ve proxy'lerin rolü

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.

TripAdvisor'ı kazımak için adım adım kılavuz

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.

Adım 1. Kütüphaneleri içe aktarın ve URL'leri ayarlayın

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

Adım 2. İstekler için üstbilgileri ayarlama

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

Adım 3. Proxy'leri kullanma

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)

Adım 4. İstekleri gönderme ve HTML'yi ayrıştırma

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)

Adım 5. XPath kullanarak veri ayıklama

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

Adım 6. Çıkarılan verileri saklayın

Çı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)

Adım 7. Verileri CSV'ye kaydetme

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)

Kodu tamamlayın


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 yorumlar