id
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Polski 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.
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
Kami akan fokus pada ulasan amazon dengan python dan memeriksa setiap tahap proses scraping langkah demi langkah.
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:
Peringkat total:
Bagian ulasan:
Nama penulis:
Peringkat:
Bagaimana cara:
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.
Proksi memungkinkan rotasi IP untuk mengurangi risiko pelarangan dan batas kecepatan. Hal ini terutama penting untuk pengikisan skala besar.
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}")
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)
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,
})
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}")
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.
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