Amazon incelemelerini Python ile kazımak, rakip analizi yaparken, incelemeleri kontrol ederken ve pazar araştırması yaparken kullanışlıdır. Bu, Amazon'daki ürün incelemelerinin Python, BeautifulSoup ve Requests kütüphaneleri ile nasıl verimli bir şekilde kazınacağını göstermektedir.
Kazıma işlemine başlamadan önce, gerekli Python kütüphanelerinin kurulu olduğundan emin olun:
pip install requests
pip install beautifulsoup4
Amazon sayfasından ürün incelemelerini çıkarmaya odaklanacağız ve kazıma işleminin her aşamasını adım adım inceleyeceğiz.
Kazımak istediğimiz öğeleri belirlemek için Amazon ürün incelemeleri sayfasının HTML yapısını inceleyin: yorumcu adları, derecelendirmeler ve yorumlar.
Ürün başlığı ve URL:
Toplam değerlendirme:
İnceleme bölümü:
Yazar adı:
Değerlendirme:
Yorum:
Amazon ürün incelemeleri sayfasına HTTP GET istekleri göndermek için Requests kütüphanesini kullanın. Meşru tarayıcı davranışını taklit etmek ve tespit edilmekten kaçınmak için başlıkları ayarlayın. Amazon tarafından engellenmekten kaçınmak için proxy'ler ve eksiksiz istek başlıkları gereklidir.
Proxy kullanmak, Amazon'un IP yasaklarından ve hız sınırlarından kaçınmak için IP adreslerini döndürmeye yardımcı olur. Anonimliği korumak ve tespit edilmeyi önlemek için büyük ölçekli kazıma için çok önemlidir. Burada, proxy ayrıntıları proxy hizmeti tarafından sağlanır.
Accept-Encoding, Accept-Language, Referer, Connection ve Upgrade-Insecure-Requests gibi çeşitli başlıkların eklenmesi, meşru bir tarayıcı isteğini taklit ederek bot olarak işaretlenme olasılığını azaltır.
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"
# Proxy hizmeti tarafından sağlanan bir proxy örneği
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',
}
# URL'ye üstbilgiler ve proxy ile HTTP GET isteği gönderme
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}")
URL, başlık ve toplam derecelendirme gibi yaygın ürün ayrıntılarını ayıklamak için BeautifulSoup kullanarak yanıtın HTML içeriğini ayrıştırın.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Ortak ürün ayrıntılarını çıkarma
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)
Tanımlanan XPath ifadelerine dayalı olarak gözden geçiren adlarını, derecelendirmeleri ve yorumları ayıklamak için HTML içeriğini ayrıştırmaya devam edin.
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,
})
Çıkarılan verileri daha fazla analiz için bir CSV dosyasına kaydetmek için Python'un yerleşik CSV modülünü kullanın.
import csv
# CSV dosya yolunu tanımlama
csv_file = 'amazon_reviews.csv'
# CSV alan adlarını tanımlama
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# CSV dosyasına veri yazma
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}")
İşte Amazon inceleme verilerini kazımak ve bir CSV dosyasına kaydetmek için eksiksiz kod:
import requests
from bs4 import BeautifulSoup
import csv
import urllib3
urllib3.disable_warnings()
# Amazon ürün incelemeleri sayfasının URL'si
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 hizmeti tarafından IP yetkilendirmesi ile sağlanan proxy
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
'http': f'http://{path_proxy}',
'https': f'https://{path_proxy}'
}
# HTTP isteği için üstbilgiler
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',
}
# URL'ye başlıklarla HTTP GET isteği gönderin ve istisnaları işleyin
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}")
# BeautifulSoup kullanarak HTML içeriğini ayrıştırma
soup = BeautifulSoup(response.content, 'html.parser')
# Ortak ürün ayrıntılarını çıkarma
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
# Bireysel incelemeleri ayıklama
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
# Her incelemeyi bir sözlükte saklayın
reviews.append({
'Product URL': product_url,
'Product Title': product_title,
'Total Rating': total_rating,
'Author': author_name,
'Rating': rating_given,
'Comment': comment,
})
# CSV dosya yolunu tanımlama
csv_file = 'amazon_reviews.csv'
# CSV alan adlarını tanımlama
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# CSV dosyasına veri yazma
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)
# Onay mesajını yazdır
print(f"Data saved to {csv_file}")
Sonuç olarak, güvenilir proxy sunucuları seçmenin web kazıma için komut dosyası yazımında önemli bir adım olduğunu vurgulamak çok önemlidir. Bu, blokajların etkili bir şekilde atlanmasını ve anti-bot filtrelerine karşı koruma sağlar. Kazıma için en uygun seçenekler, yüksek güven faktörü ve dinamik IP adresleri sunan konut proxy sunucuları ile yüksek hız ve operasyonel istikrar sağlayan statik ISP proxy'leridir.
Yorumlar: 0