Panduan untuk mengikis ulasan Amazon menggunakan Python

Komentar: 0

Mengikis ulasan Amazon dengan Python bisa sangat berguna - baik saat Anda menganalisis kompetitor, memeriksa apa yang dikatakan pelanggan, atau menggali tren pasar. Jika Anda bertanya-tanya bagaimana cara mengikis ulasan Amazon menggunakan Python, tutorial singkat ini memandu Anda melalui proses langsung yang menggunakan paket Requests dan BeautifulSoup untuk mengambil konten ulasan secara terprogram.

Langkah 1. Menginstal pustaka yang diperlukan

Sebelum melakukan hal lain, Anda perlu menginstal beberapa pustaka. Dua ketergantungan inti, Requests untuk panggilan jaringan dan BeautifulSoup untuk penjelajahan pohon HTML, keduanya dapat diamankan dalam satu jalur terminal:

pip install requests
pip install beautifulsoup4

Langkah 2. Mengonfigurasi proses pengikisan

Kami akan fokus pada ulasan amazon dengan python dan memeriksa setiap tahap proses scraping langkah demi langkah.

Memahami struktur situs web

Memahami struktur HTML situs sangat penting untuk mengidentifikasi elemen-elemen ulasan. Bagian ulasan mencakup bidang-bidang seperti pegangan pengulas, peringkat bintang, dan komentar tertulis; semua ini harus ditemukan melalui alat bantu pemeriksaan peramban.

Judul dan URL produk:

1.png

Peringkat total:

2.png

Bagian ulasan:

3.png

Nama penulis:

4.png

Peringkat:

5.png

Bagaimana cara:

6.png

Mengirim permintaan HTTP

Header memainkan peran penting. String User-Agent dan header lainnya diatur untuk meniru peramban biasa dan mengurangi kemungkinan terdeteksi. Jika Anda ingin melakukannya dengan benar, mengikuti panduan pengikisan Amazon, python akan menunjukkan kepada Anda cara mengatur header ini bersama dengan proksi untuk menjaga permintaan Anda tetap lancar dan tidak terdeteksi.

Proxy

Proksi memungkinkan rotasi IP untuk mengurangi risiko pelarangan dan batas kecepatan. Hal ini terutama penting untuk pengikisan skala besar.

Tajuk permintaan lengkap

Menyertakan berbagai tajuk seperti Accept-Encoding, Accept-Language, Referer, Connection, dan Upgrade-Insecure-Requests akan meniru permintaan peramban yang sah, sehingga mengurangi kemungkinan ditandai sebagai 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"

# Example of a proxy provided by the proxy service
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',
}

# Send HTTP GET request to the URL with headers and proxy
try:
    response = requests.get(url, headers=headers, proxies=proxy, timeout=10)
    response.raise_for_status()  # Raise an error if the request failed

except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

Langkah 3. Mengekstrak detail produk menggunakan BeautifulSoup

Setelah halaman dimuat, BeautifulSoup mengubah HTML mentah menjadi pohon yang dapat dicari. Dari struktur itu, scraper mengambil tautan produk kanonik, judul halaman, dan agregat peringkat yang terlihat.

from bs4 import BeautifulSoup

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

# Extracting common product details
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)

Langkah 4. Mengekstrak data ulasan menggunakan BeautifulSoup

Kita kembali ke struktur HTML yang sama, kali ini berfokus pada pengumpulan nama pengulas, peringkat bintang, dan komentar tertulis - semuanya dilakukan menggunakan Python untuk mengikis ulasan Amazon secara efisien dengan penyeleksi yang sudah ditentukan.

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

Langkah 5. Menyimpan data ke CSV

csv.writer bawaan Python dapat menyimpan data ulasan yang dikumpulkan ke dalam file .csv untuk dianalisis nanti.

import csv

# Define CSV file path
csv_file = 'amazon_reviews.csv'

# Define CSV fieldnames
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Writing data to CSV file
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}")

Kode lengkap

Sebuah blok kode yang menyatukan langkah-langkah pembuatan permintaan, penguraian, dan keluaran file disajikan, merangkum seluruh alur kerja scraping dalam satu skrip yang dapat dijalankan:

import requests
from bs4 import BeautifulSoup
import csv
import urllib3

urllib3.disable_warnings()

# URL of the Amazon product reviews page
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 provided by the proxy service with IP-authorization
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
   'http': f'http://{path_proxy}',
   'https': f'https://{path_proxy}'
}

# Headers for the HTTP request
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',
}

# Send HTTP GET request to the URL with headers and handle exceptions
try:
   response = requests.get(url, headers=headers, timeout=10, proxies=proxy, verify=False)
   response.raise_for_status()  # Raise an error if the request failed

except requests.exceptions.RequestException as e:
   print(f"Error: {e}")

# Use BeautifulSoup to parse the HTML and grab the data you need
soup = BeautifulSoup(response.content, 'html.parser')

# Extracting common product details
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

# Extracting individual reviews
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

   # Store each review in a dictionary
   reviews.append({
       'Product URL': product_url,
       'Product Title': product_title,
       'Total Rating': total_rating,
       'Author': author_name,
       'Rating': rating_given,
       'Comment': comment,
   })

# Define CSV file path
csv_file = 'amazon_reviews.csv'

# Define CSV fieldnames
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Writing data to CSV file
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 confirmation message
print(f"Data saved to {csv_file}")

Proksi yang andal meningkatkan peluang untuk melewati blokir dan membantu mengurangi deteksi oleh filter anti-bot. Untuk scraping, proksi residensial sering kali lebih disukai karena faktor kepercayaannya, sedangkan proksi ISP statis memberikan kecepatan dan stabilitas.

Kesimpulan

Mengorek ulasan produk Amazon menggunakan Python sangat mungkin dilakukan, dan Python menyediakan alat yang diperlukan untuk melakukannya. Hanya dengan beberapa pustaka dan sedikit mengulik halaman, Anda bisa mendapatkan semua jenis info yang berguna: mulai dari apa yang benar-benar dipikirkan pelanggan hingga menemukan di mana pesaing Anda tergelincir.

Tentu saja, ada beberapa rintangan: Amazon tidak terlalu menyukai pengikis. Jadi, jika Anda mencoba mengikis ulasan produk Amazon dengan gaya Python dalam skala besar, Anda akan membutuhkan proksi untuk tetap berada di bawah radar. Opsi yang paling dapat diandalkan adalah proxy perumahan (skor kepercayaan yang besar, IP yang bergilir) atau proxy ISP statis (cepat dan stabil).

Komentar:

0 komentar