Cách cạo dữ liệu TripAdvisor bằng Python

18 tháng 4 2025
3 phút đọc
Tóm tắt được tạo bởi AI:

TripAdvisor là một cổng thông tin du lịch được sử dụng rộng rãi, nơi người dùng viết đánh giá về chỗ ở, ăn uống, tham quan, v.v. Việc làm phong phú dữ liệu bằng các đánh giá trên TripAdvisor có thể hữu ích cho Phân tích du lịch, Nghiên cứu đối thủ cạnh tranh, v.v. Trong hướng dẫn này, chúng tôi sẽ trình bày cách trích xuất dữ liệu TripAdvisor bằng python và lưu trữ dữ liệu ở định dạng csv.

Cài đặt các thư viện cần thiết

Để xây dựng cái cào này, chúng tôi sẽ sử dụng các thư viện Python sau:

  • requests: Để thực hiện các yêu cầu HTTP để có được nội dung trang.
  • lxml: Để phân tích nội dung HTML và trích xuất các yếu tố với XPath.

Cài đặt các thư viện cần thiết bằng pip:


pip install requests lxml

Vai trò của các tiêu đề và proxy trong việc cạo dữ liệu hiệu quả

Khi lấy dữ liệu từ các trang web như TripAdvisor, điều quan trọng là phải định cấu hình đúng các tiêu đề yêu cầu, đặc biệt là tác nhân người dùng. Bằng cách đặt tiêu đề này, bạn có thể ngụy trang các yêu cầu của mình là những người đến từ người dùng hợp pháp, giúp giảm thiểu rủi ro các hoạt động cạo của bạn kích hoạt các khối do các mẫu lưu lượng truy cập bất thường. Ngoài ra, việc sử dụng các máy chủ proxy là điều cần thiết để phá vỡ các hạn chế liên quan đến số lượng yêu cầu được phép từ một địa chỉ IP duy nhất, do đó tạo điều kiện cho các nỗ lực thu thập dữ liệu rộng rãi hơn.

Hướng dẫn từng bước để cạo TripAdvisor

Chúng tôi sẽ trải qua quá trình cạo một danh sách các trang khách sạn, trích xuất chi tiết và lưu chúng vào tệp CSV. Hãy để chia nhỏ từng phần.

Bước 1. Nhập thư viện và thiết lập URL

Để bắt đầu, hãy nhập các thư viện cần thiết:


import requests
from lxml.html import fromstring
import csv

Sau đó, xác định danh sách các URL cho các trang khách sạn bạn dự định cạo dữ liệu từ:


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

Bước 2. Đặt tiêu đề cho các yêu cầu

Để đảm bảo rằng các yêu cầu của bạn bắt chước các yêu cầu từ một trình duyệt thực, điều quan trọng là phải định cấu hình các tiêu đề đúng. Bước này giúp bỏ qua các hệ thống bảo vệ chống BOT trên các trang web và giảm thiểu rủi ro bị chặn.


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

Bước 3. Sử dụng proxy

Proxy có thể giúp bỏ qua các hạn chế dựa trên IP. Trong ví dụ dưới đây, chúng tôi sử dụng proxy với xác thực địa chỉ IP. Đây là cách để thêm một proxy vào các yêu cầu.


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

Bước 4. Gửi yêu cầu và phân tích cú pháp HTML

Đối với mỗi URL, hãy gửi yêu cầu và phân tích phản hồi HTML:


extracted_data = []
for url in urls_list:
    response = requests.get(url, headers=headers)  # Thêm proxy = proxy nếu cần
    parser = fromstring(response.text)

Bước 5. Trích xuất dữ liệu bằng cách sử dụng XPath

Sử dụng XPath, chúng ta có thể nhắm mục tiêu các yếu tố cụ thể trên trang:


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

Bước 6. Lưu trữ dữ liệu được trích xuất

Lưu trữ thông tin được trích xuất trong từ điển và nối nó vào danh sách:


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)

Bước 7. Lưu dữ liệu vào CSV

Sau khi cạo, hãy lưu dữ liệu vào tệp 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)

Hoàn thành mã


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

Hướng dẫn này không chỉ đặt một nền tảng kỹ thuật để quét dữ liệu mà còn mở ra các con đường để phân tích toàn diện trong lĩnh vực du lịch. Các phương pháp và kỹ thuật chi tiết ở đây trao quyền cho người dùng đi sâu hơn vào xu hướng thị trường và hành vi của người tiêu dùng. Những hiểu biết như vậy là rất quan trọng để phát triển các chiến lược quản lý danh tiếng mạnh mẽ và tiến hành các phân tích cạnh tranh. Bằng cách tận dụng hướng dẫn này, người dùng có thể nâng cao sự hiểu biết của họ về các động lực trong ngành du lịch, giúp đưa ra các quyết định chiến lược, có thông tin thúc đẩy thành công.

Nội dung của bài viết:

Các bài viết gần đây

Quay lại blog
Quay lại blog