Cara mengikis data TripAdvisor menggunakan Python

Komentar: 0

TripAdvisor adalah portal perjalanan yang banyak digunakan di mana pengguna menulis ulasan untuk akomodasi, tempat makan, tamasya, dll. Memperkaya data dengan ulasan TripAdvisor dapat membantu untuk Analisis Perjalanan, Studi Pesaing, dll. Dalam panduan ini, kita akan membahas bagaimana data TripAdvisor dapat diekstrak menggunakan python dan data disimpan dalam format CSV.

Pemasangan pustaka yang diperlukan

Untuk membuat scraper ini, kita akan menggunakan pustaka Python berikut ini:

  • requests: Untuk membuat permintaan HTTP untuk mendapatkan konten halaman.
  • lxml: Untuk mengurai konten HTML dan mengekstrak elemen dengan XPath.

Instal pustaka yang diperlukan menggunakan pip:


pip install requests lxml

Peran header dan proxy dalam pengikisan data yang efektif

Saat mengikis data dari situs web seperti TripAdvisor, sangat penting untuk mengonfigurasi tajuk permintaan dengan benar, terutama Agen Pengguna. Dengan mengatur tajuk ini, Anda dapat menyamarkan permintaan sebagai permintaan yang berasal dari pengguna yang sah, sehingga meminimalkan risiko aktivitas penggalian yang memicu pemblokiran karena pola lalu lintas yang tidak biasa. Selain itu, menggunakan server proxy sangat penting untuk menghindari pembatasan yang terkait dengan jumlah permintaan yang diizinkan dari satu alamat IP, sehingga memfasilitasi upaya pengumpulan data yang lebih luas.

Panduan langkah demi langkah untuk mengikis TripAdvisor

Kita akan membahas proses penggalian daftar halaman hotel, mengekstrak detailnya, dan menyimpannya ke dalam file CSV. Mari kita uraikan setiap bagiannya.

Langkah 1. Mengimpor pustaka dan menyiapkan URL

Untuk memulai, impor pustaka yang diperlukan:


import requests
from lxml.html import fromstring
import csv

Kemudian, tentukan daftar URL untuk halaman hotel yang ingin Anda kikis datanya:


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

Langkah 2. Mengatur tajuk untuk permintaan

Untuk memastikan bahwa permintaan Anda meniru permintaan dari peramban asli, sangat penting untuk mengonfigurasi header dengan benar. Langkah ini membantu menerobos sistem proteksi anti-bot di situs web dan meminimalkan risiko diblokir.


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

Langkah 3. Menggunakan proxy

Proksi dapat membantu menerobos pembatasan berbasis IP. Pada contoh di bawah ini, kami menggunakan proxy dengan autentikasi alamat IP. Berikut ini cara menambahkan proxy ke permintaan.


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

Langkah 4. Mengirim permintaan dan mengurai HTML

Untuk setiap URL, kirimkan permintaan dan parsing respons HTML:


extracted_data = []
for url in urls_list:
    response = requests.get(url, headers=headers)  # Tambahkan proxy = proxy jika diperlukan
    parser = fromstring(response.text)

Langkah 5. Mengekstrak data menggunakan XPath

Dengan menggunakan XPath, kita dapat menargetkan elemen tertentu pada halaman:


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

Langkah 6. Menyimpan data yang diekstrak

Simpan informasi yang diekstrak dalam kamus dan tambahkan ke daftar:


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)

Langkah 7. Menyimpan data ke CSV

Setelah melakukan scraping, simpan data ke dalam file 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)

Kode lengkap


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

Panduan ini tidak hanya memberikan dasar teknis untuk penggalian data, namun juga membuka jalan untuk analisis komprehensif di sektor pariwisata. Metode dan teknik yang dijelaskan di sini memberdayakan pengguna untuk menggali lebih dalam tren pasar dan perilaku konsumen. Wawasan tersebut sangat penting untuk mengembangkan strategi manajemen reputasi yang kuat dan melakukan analisis kompetitif. Dengan memanfaatkan panduan ini, pengguna dapat meningkatkan pemahaman mereka tentang dinamika dalam industri pariwisata, sehingga memungkinkan untuk membuat keputusan strategis yang tepat yang mendorong kesuksesan.

Komentar:

0 komentar