Hướng dẫn cạo các đánh giá Amazon bằng Python

Bình luận: 0

Cạo các đánh giá của Amazon với Python rất hữu ích khi tiến hành phân tích đối thủ cạnh tranh, kiểm tra đánh giá và nghiên cứu thị trường. Điều này cho thấy cách cạo các đánh giá sản phẩm trên Amazon một cách hiệu quả với các thư viện Python, BeautifulSoup và yêu cầu.

Bước 1. Cài đặt các thư viện bắt buộc

Trước khi lặn vào quy trình cạo, đảm bảo bạn đã cài đặt các thư viện Python cần thiết:

pip install requests
pip install beautifulsoup4

Bước 2. Định cấu hình quy trình cạo

Chúng tôi sẽ tập trung vào việc trích xuất các đánh giá sản phẩm từ trang Amazon và kiểm tra từng giai đoạn của quá trình cạo từng bước.

Hiểu cấu trúc của trang web

Kiểm tra cấu trúc HTML của trang đánh giá sản phẩm Amazon để xác định các yếu tố chúng tôi muốn cạo: tên người đánh giá, xếp hạng và nhận xét.

Tiêu đề sản phẩm và URL :

1.png

Tổng xếp hạng:

2.png

Phần xem xét:

3.png

Tên tác giả:

4.png

Xếp hạng:

5.png

Bình luận:

6.png

Gửi các yêu cầu HTTP

Sử dụng thư viện yêu cầu để gửi HTTP Nhận yêu cầu đến trang Đánh giá sản phẩm Amazon. Thiết lập các tiêu đề để bắt chước hành vi của trình duyệt hợp pháp và tránh phát hiện. Proxy và các tiêu đề yêu cầu hoàn chỉnh là rất cần thiết để tránh bị Amazon chặn.

Proxy

Sử dụng proxy giúp xoay địa chỉ IP để tránh các lệnh cấm IP và giới hạn tốc độ từ Amazon. Điều quan trọng đối với việc cạo quy mô lớn để duy trì tính ẩn danh và ngăn chặn phát hiện. Ở đây, các chi tiết proxy được cung cấp bởi dịch vụ proxy.

Hoàn thành các tiêu đề yêu cầu

Bao gồm các tiêu đề khác nhau như mã hóa chấp nhận, chấp nhận ngôn ngữ, người giới thiệu, kết nối và yêu cầu bảo mật nâng cấp bắt chước một yêu cầu trình duyệt hợp pháp, giảm cơ hội được gắn cờ như một bot.


import requests

url = "https://www.amazon.com/Portable-Mechanical-Keyboard-MageGee-Backlit/product-reviews/B098LG3N6R/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"

# Ví dụ về proxy do dịch vụ proxy cung cấp
proxy = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

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-US,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}

# Gửi HTTP Nhận yêu cầu đến URL với các tiêu đề và proxy
try:
    response = requests.get(url, headers=headers, proxies=proxy, timeout=10)
    response.raise_for_status()  # Raise an exception for bad response status
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

Bước 3. Trích xuất chi tiết sản phẩm bằng cách sử dụng đẹp

Phân tích nội dung HTML của phản hồi bằng cách sử dụng đẹp để trích xuất các chi tiết sản phẩm phổ biến như URL, tiêu đề và tổng xếp hạng.


from bs4 import BeautifulSoup

soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất chi tiết sản phẩm phổ biến
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '')
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True)
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True)

Bước 4. Trích xuất dữ liệu đánh giá bằng cách sử dụng đẹp

Tiếp tục phân tích nội dung HTML để trích xuất tên, xếp hạng và nhận xét của người đánh giá dựa trên các biểu thức XPath được xác định.


reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
    author_name = review.find('span', class_='a-profile-name').get_text(strip=True)
    rating_given = review.find('i', class_='review-rating').get_text(strip=True)
    comment = review.find('span', class_='review-text').get_text(strip=True)

    reviews.append({
        'Product URL': product_url,
        'Product Title': product_title,
        'Total Rating': total_rating,
        'Author': author_name,
        'Rating': rating_given,
        'Comment': comment,
    })

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

Sử dụng mô-đun CSV tích hợp của Python để lưu dữ liệu được trích xuất vào tệp CSV để phân tích thêm.


import csv

# Xác định đường dẫn tệp CSV
csv_file = 'amazon_reviews.csv'

# Xác định tên trường CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Viết dữ liệu vào tệp CSV
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    for review in reviews:
        writer.writerow(review)

print(f"Data saved to {csv_file}")

Hoàn thành Mã

Dưới đây là mã hoàn chỉnh để xóa dữ liệu đánh giá Amazon và lưu nó vào tệp CSV:


import requests
from bs4 import BeautifulSoup
import csv
import urllib3

urllib3.disable_warnings()

# URL của trang Đánh giá sản phẩm Amazon
url = "https://www.amazon.com/Portable-Mechanical-Keyboard-MageGee-Backlit/product-reviews/B098LG3N6R/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"

# Proxy được cung cấp bởi dịch vụ proxy với hỗ trợ IP
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
   'http': f'http://{path_proxy}',
   'https': f'https://{path_proxy}'
}

# Tiêu đề cho yêu cầu HTTP
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-US,en;q=0.9',
   'cache-control': 'no-cache',
   'dnt': '1',
   'pragma': 'no-cache',
   'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
   'sec-ch-ua-mobile': '?0',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'same-origin',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}

# Gửi HTTP Nhận yêu cầu đến URL với các tiêu đề và xử lý ngoại lệ
try:
   response = requests.get(url, headers=headers, timeout=10, proxies=proxy, verify=False)
   response.raise_for_status()  # Raise an exception for bad response status
except requests.exceptions.RequestException as e:
   print(f"Error: {e}")

# Phân tích nội dung HTML bằng cách sử dụng đẹp
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất chi tiết sản phẩm phổ biến
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '')  # Extract product URL
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True)  # Extract product title
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True)  # Extract total rating

# Trích xuất các đánh giá cá nhân
reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
   author_name = review.find('span', class_='a-profile-name').get_text(strip=True)  # Extract author name
   rating_given = review.find('i', class_='review-rating').get_text(strip=True)  # Extract rating given
   comment = review.find('span', class_='review-text').get_text(strip=True)  # Extract review comment

   # Lưu trữ từng đánh giá trong một từ điển
   reviews.append({
       'Product URL': product_url,
       'Product Title': product_title,
       'Total Rating': total_rating,
       'Author': author_name,
       'Rating': rating_given,
       'Comment': comment,
   })

# Xác định đường dẫn tệp CSV
csv_file = 'amazon_reviews.csv'

# Xác định tên trường CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Viết dữ liệu vào tệp CSV
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
   writer = csv.DictWriter(file, fieldnames=fieldnames)
   writer.writeheader()
   for review in reviews:
       writer.writerow(review)

# In tin nhắn xác nhận
print(f"Data saved to {csv_file}")

Tóm lại, điều quan trọng là phải nhấn mạnh rằng việc chọn các máy chủ proxy đáng tin cậy là một bước quan trọng trong việc viết kịch bản để quét web. Điều này đảm bảo bỏ qua hiệu quả của tắc nghẽn và bảo vệ chống lại các bộ lọc chống BOT. Các tùy chọn phù hợp nhất để cạo là các máy chủ proxy dân cư, cung cấp hệ số tin cậy cao và địa chỉ IP động, cùng với các proxy ISP tĩnh cung cấp tốc độ cao và ổn định hoạt động.

Bình luận:

0 Bình luận