Panduan untuk mengikis ulasan Amazon menggunakan Python

Komentar: 0

Mengikis ulasan Amazon dengan Python berguna ketika melakukan analisis pesaing, memeriksa ulasan, dan melakukan riset pasar. Ini menunjukkan cara mengikis ulasan produk di Amazon secara efisien dengan Python, BeautifulSoup, dan perpustakaan Requests.

Langkah 1. Menginstal pustaka yang diperlukan

Sebelum masuk ke dalam proses scraping, pastikan Anda telah menginstal pustaka Python yang diperlukan:

pip install requests
pip install beautifulsoup4

Langkah 2. Mengkonfigurasi proses pengikisan

Kami akan fokus pada mengekstrak ulasan produk dari halaman Amazon dan memeriksa setiap tahap proses pengikisan langkah demi langkah.

Langkah 3. Memahami struktur situs web

Periksa struktur HTML halaman ulasan produk Amazon untuk mengidentifikasi elemen yang ingin kita kikis: nama pengulas, peringkat, dan komentar.

Judul dan URL produk:

1.png

Peringkat total:

2.png

Bagian ulasan:

3.png

Nama penulis:

4.png

Peringkat:

5.png

Komentar:

6.png

Mengirim permintaan HTTP

Gunakan perpustakaan Permintaan untuk mengirim permintaan HTTP GET ke halaman ulasan produk Amazon. Siapkan tajuk untuk meniru perilaku browser yang sah dan menghindari deteksi. Proksi dan header permintaan yang lengkap sangat penting untuk menghindari pemblokiran oleh Amazon.

Proxy

Menggunakan proxy membantu merotasi alamat IP untuk menghindari larangan IP dan batas tarif dari Amazon. Ini sangat penting untuk pengikisan skala besar untuk menjaga anonimitas dan mencegah deteksi. Di sini, detail proksi disediakan oleh layanan proksi.

Tajuk permintaan lengkap

Menyertakan berbagai header 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"

# Contoh proxy yang disediakan oleh layanan proxy
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',
}

# Kirim permintaan HTTP GET ke URL dengan header dan 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}")

Langkah 3. Mengekstrak detail produk menggunakan BeautifulSoup

Parsing konten HTML dari respons menggunakan BeautifulSoup untuk mengekstrak detail produk yang umum seperti URL, judul, dan peringkat total.


from bs4 import BeautifulSoup

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

# Mengekstrak detail produk yang umum
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

Lanjutkan penguraian konten HTML untuk mengekstrak nama pengulas, peringkat, dan komentar berdasarkan ekspresi XPath yang teridentifikasi.


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

Gunakan modul CSV bawaan Python untuk menyimpan data yang diekstrak ke dalam file CSV untuk analisis lebih lanjut.


import csv

# Tentukan jalur file CSV
csv_file = 'amazon_reviews.csv'

# Tentukan nama bidang CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Menulis data ke file 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}")

Kode lengkap

Berikut ini adalah kode lengkap untuk mengikis data ulasan Amazon dan menyimpannya ke file CSV:


import requests
from bs4 import BeautifulSoup
import csv
import urllib3

urllib3.disable_warnings()

# URL halaman ulasan produk 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 yang disediakan oleh layanan proxy dengan otorisasi IP
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
   'http': f'http://{path_proxy}',
   'https': f'https://{path_proxy}'
}

# Header untuk permintaan 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',
}

# Mengirim permintaan HTTP GET ke URL dengan header dan menangani pengecualian
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}")

# Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Mengekstrak detail produk yang umum
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

# Mengekstrak ulasan individu
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

   # Menyimpan setiap ulasan dalam kamus
   reviews.append({
       'Product URL': product_url,
       'Product Title': product_title,
       'Total Rating': total_rating,
       'Author': author_name,
       'Rating': rating_given,
       'Comment': comment,
   })

# Tentukan jalur file CSV
csv_file = 'amazon_reviews.csv'

# Tentukan nama bidang CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Menulis data ke file 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)

# Mencetak pesan konfirmasi
print(f"Data saved to {csv_file}")

Sebagai kesimpulan, sangat penting untuk menekankan bahwa memilih server proxy yang andal merupakan langkah kunci dalam penulisan skrip untuk web scraping. Hal ini memastikan penerobosan penyumbatan yang efektif dan perlindungan terhadap filter anti-bot. Opsi yang paling cocok untuk scraping adalah server proxy residensial, yang menawarkan faktor kepercayaan tinggi dan alamat IP dinamis, bersama dengan proxy ISP statis yang memberikan kecepatan tinggi dan stabilitas operasional.

Komentar:

0 komentar