Python kullanarak Amazon incelemelerini kazıma kılavuzu

Yorumlar: 0

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.

Adım 1. Gerekli kütüphaneleri yükleme

Kazıma işlemine başlamadan önce, gerekli Python kütüphanelerinin kurulu olduğundan emin olun:

pip install requests
pip install beautifulsoup4

Adım 2. Kazıma işlemini yapılandırma

Amazon sayfasından ürün incelemelerini çıkarmaya odaklanacağız ve kazıma işleminin her aşamasını adım adım inceleyeceğiz.

Web sitesinin yapısını anlamak

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:

1.png

Toplam değerlendirme:

2.png

İnceleme bölümü:

3.png

Yazar adı:

4.png

Değerlendirme:

5.png

Yorum:

6.png

HTTP istekleri gönderme

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.

Proksiler

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.

Tamamlanmış istek üstbilgileri

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

Adım 3. BeautifulSoup kullanarak ürün ayrıntılarını çıkarma

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)

Adım 4. BeautifulSoup kullanarak inceleme verilerini ayıklama

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

Adım 5. Verileri CSV'ye kaydetme

Çı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}")

Tamamlanmış kod

İş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 yorumlar