Kendinizi, Amazon'un geniş ve gizemli diyarına (yağmur ormanlarına değil, çevrimiçi perakende devi) balıklama atlayan maceracı bir kaşif olarak hayal edin. Her tıklamayla paha biçilmez hazineleri ortaya çıkarır, verilerin keşfedilmemiş topraklarının derinliklerine inersiniz.
Bu heyecan verici keşif gezisinde, Amazon web kazımanın yoğun, dijital ormanında gezinmek için adım adım bir kılavuz sunuyoruz. Değerli bilgileri benzersiz bir hassasiyetle elde etmek için uzman ipuçları ve püf noktaları ile donanmış, eşi benzeri olmayan bir yolculuğa çıkmaya hazırlanın.
İçindekiler
- Amazon'dan Hangi Veriler Alınacak?
- Bazı Temel Gereksinimler
- Kazıma için Kurulum
- Amazon Ürün Bilgilerini Kazımak
- Amazon'da Birden Çok Sayfa Nasıl Kazılır
- Amazon'u Kazımak: SSS
- Çözüm
O halde cesaretinizi toplayın, sanal botlarınızı takın ve veri odaklı maceramıza birlikte başlayalım!
Amazon'dan Hangi Veriler Alınacak?
Bir Amazon ürünüyle ilişkili çok sayıda veri noktası vardır ancak kazıma sırasında odaklanılması gereken temel unsurlar şunlardır:
- ürün başlığı
- Maliyet
- Tasarruf (varsa)
- Ürün Özeti
- İlgili özellik listesi (varsa)
- Puanı inceleyin
- Ürün görselleri
Bir Amazon ürününü kazırken göz önünde bulundurulması gereken başlıca hususlar bunlar olsa da, çıkardığınız bilgilerin belirli hedeflerinize bağlı olarak değişebileceğini unutmamak önemlidir.
Bazı Temel Gereksinimler
Çorba hazırlamak için doğru malzemelere ihtiyacımız var. Benzer şekilde, yeni web kazıyıcımız da belirli bileşenler gerektirir.
- Python — Kullanıcı dostu olması ve kapsamlı kütüphane koleksiyonu, Python'u web kazıma için en iyi seçenek haline getiriyor. Henüz yüklü değilse bu kılavuza bakın.
- BeautifulSoup — Bu, Python için mevcut birçok web kazıma kütüphanesinden biridir. Basitliği ve temiz kullanımı onu web kazıma için popüler bir seçim haline getiriyor. Python'u başarıyla yükledikten sonra Beautiful Soup'u aşağıdaki komutu çalıştırarak yükleyebilirsiniz: pip install bs4
- HTML Etiketlerinin Temel Anlaşılması — HTML etiketleri hakkında gerekli bilgiyi edinmek için bu eğitime başvurun.
- İnternet tarayıcısı — Bir web sitesinden pek çok alakasız bilgiyi filtrelememiz gerektiğinden, filtreleme amacıyla belirli kimlikler ve etiketler gerekir. Bu etiketleri tanımlamak için Google Chrome veya Mozilla Firefox gibi bir web tarayıcısı kullanışlıdır.
Kazıma için Kurulum
Başlamak için Python'un kurulu olduğundan emin olun. Python 3.8 veya sonraki bir sürümüne sahip değilseniz en son sürümü indirip yüklemek için python.org adresini ziyaret edin.
Ardından, Amazon için web kazıma kodu dosyalarınızı depolamak için bir dizin oluşturun. Projeniz için sanal bir ortam oluşturmak genellikle iyi bir fikirdir.
MacOS ve Linux'ta sanal bir ortam oluşturmak ve etkinleştirmek için aşağıdaki komutları kullanın:
$ python3 -m venv .env
$ source .env/bin/activate
Windows kullanıcıları için komutlar biraz farklı olacaktır:
d:amazon>python -m venv .env
d:amazon>.envscriptsactivate
Şimdi gerekli Python paketlerini kurmanın zamanı geldi.
İki ana görev için paketlere ihtiyacınız olacak: HTML'yi almak ve ilgili verileri çıkarmak için onu ayrıştırmak.
İstek kitaplığı, HTTP istekleri yapmak için yaygın olarak kullanılan bir üçüncü taraf Python kitaplığıdır. Web sunucularına HTTP istekleri yapmak ve yanıtları almak için basit ve kullanıcı dostu bir arayüz sunar. Belki de web kazıma için en bilinen kütüphanedir.
Bununla birlikte, İstekler kitaplığının bir sınırlaması vardır: HTML yanıtını bir dize olarak döndürür; bu, web kazıma kodu yazarken fiyatları listelemek gibi belirli öğeleri aramak zor olabilir.
İşte burada Güzel Çorba devreye giriyor. Güzel Çorba, HTML ve XML dosyalarından veri çıkaran, web kazıma için tasarlanmış bir Python kütüphanesidir. Etiketleri, nitelikleri veya belirli bir metni arayarak bir web sayfasından bilgi almanızı sağlar.
Her iki kütüphaneyi de kurmak için aşağıdaki komutu kullanın:
$ python3 -m pip install requests beautifulsoup4
Windows kullanıcıları için, komutun geri kalanını aynı tutarak 'python3'ü 'python' ile değiştirin:
d:amazon>python -m pip install requests beautifulsoup4
Beautiful Soup kütüphanesinin 4. versiyonunu yüklediğimizi unutmayın.
Şimdi İstekler kazıma kütüphanesini test edelim. Amazon.py adında yeni bir dosya oluşturun ve aşağıdaki kodu girin:
import requests
url = 'https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L'
response = requests.get(url)
print(response.text)
Dosyayı kaydedin ve terminalden çalıştırın.
$ python3 amazon.py
Çoğu durumda istediğiniz HTML'yi görüntüleyemezsiniz. Amazon isteği engelleyecek ve aşağıdaki yanıtı alacaksınız:
To discuss automated access to Amazon data please contact [email protected].
Response.status_code dosyasını yazdırırsanız 200 başarı kodu yerine 503 hatası aldığınızı göreceksiniz.
Amazon bu isteğin bir tarayıcıdan gelmediğini biliyor ve onu engelliyor. Bu uygulama birçok web sitesinde yaygındır. Amazon isteklerinizi engelleyebilir ve 500, hatta bazen 400 ile başlayan bir hata kodu döndürebilir.
Basit bir çözüm, isteğinizle birlikte bir tarayıcı tarafından gönderilenleri taklit eden başlıklar göndermektir.
Bazen yalnızca kullanıcı aracısını göndermek yeterlidir. Diğer zamanlarda, kabul edilen dil başlığı gibi ek başlıklar göndermeniz gerekebilir.
Tarayıcınız tarafından gönderilen kullanıcı aracısını bulmak için F12 tuşuna basın, Ağ sekmesini açın ve sayfayı yeniden yükleyin. İlk isteği seçin ve İstek Başlıklarını inceleyin.
Bu kullanıcı aracısını kopyalayın ve başlıklar için, kullanıcı aracısı ve kabul edilen dil başlıklarıyla bu örnekte olduğu gibi bir sözlük oluşturun:
custom_headers = { '
user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'accept-language': 'en-GB,en;q=0.9',
}
Daha sonra bu sözlüğü get yönteminde isteğe bağlı bir parametre olarak gönderebilirsiniz:
response = requests.get(url, headers=custom_headers
Amazon Ürün Bilgilerini Kazımak
Amazon ürünlerini web kazıma sürecinde genellikle iki tür sayfayla ilgilenirsiniz: kategori sayfası ve ürün ayrıntıları sayfası.
Örneğin, ziyaret edin https://www.amazon.com/b?node=12097479011 veya Amazon'da Kulak Üstü Kulaklıkları arayın. Arama sonuçlarını görüntüleyen sayfa, kategori sayfası olarak bilinir.
Kategori sayfası ürün başlığını, ürün görselini, ürün derecelendirmesini, ürün fiyatını ve en önemlisi ürün URL'leri sayfasını sunar. Ürün açıklamaları gibi daha fazla bilgiye ulaşmak için ürün detayları sayfasını ziyaret etmelisiniz.
Ürün ayrıntıları sayfasının yapısını inceleyelim.
Gibi bir ürün URL'si açın https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L, Chrome veya başka bir modern tarayıcı kullanarak. Ürün başlığına sağ tıklayın ve İncele'yi seçin. Ürün başlığının HTML işaretlemesi vurgulanacaktır.
Bunun, id özelliğinin "productTitle" olarak ayarlandığı bir span etiketi olduğunu fark edeceksiniz.
Benzer şekilde, fiyatın HTML biçimlendirmesini görüntülemek için fiyata sağ tıklayın ve İncele'yi seçin.
Fiyatın dolar bileşeni, "a-fiyat-bütün" sınıfına sahip bir span etiketinde bulunurken, sent bileşeni, "a-fiyat-kesir" sınıfına sahip başka bir span etiketindedir.
Derecelendirmeyi, görseli ve açıklamayı da aynı şekilde bulabilirsiniz.
Bu bilgileri topladıktan sonra mevcut koda aşağıdaki satırları ekleyin:
response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')
Beautiful Soup, bulma yöntemlerini kullanarak etiketleri seçmenin farklı bir yöntemini sunar. Ayrıca alternatif olarak CSS seçicilerini de destekler. Aynı sonuca ulaşmak için her iki yaklaşımı da kullanabilirsiniz. Bu derste, öğeleri seçmek için evrensel bir yöntem olan CSS seçicileri kullanacağız. CSS seçiciler, Amazon ürün bilgilerini çıkarmaya yönelik neredeyse tüm web kazıma araçlarıyla uyumludur.
Artık belirli bilgileri sorgulamak için Soup nesnesini kullanmaya hazırsınız.
Ürün Adı Çıkarılıyor
Ürün adı veya başlığı 'productTitle' kimliğine sahip bir span öğesinde bulunur. Benzersiz kimlikleri kullanarak öğeleri seçmek basittir.
Örnek olarak aşağıdaki kodu düşünün:
title_element = soup.select_one('#productTitle')
CSS seçiciyi, bir öğe örneği döndüren select_one yöntemine aktarıyoruz.
Metinden bilgi çıkarmak için metin özelliğini kullanın.
title = title_element.text
Yazdırıldığında birkaç beyaz boşluk fark edebilirsiniz. Bu sorunu çözmek için aşağıdaki gibi bir .strip() işlev çağrısı ekleyin:
title = title_element.text.strip()
Ürün Derecelendirmelerini Çıkarma
Amazon ürün derecelendirmelerini almak biraz daha fazla çaba gerektirir.
Öncelikle derecelendirme için bir seçici oluşturun:
#acrPopover
Daha sonra derecelendirmeyi içeren öğeyi seçmek için aşağıdaki ifadeyi kullanın:
rating_element = soup.select_one('#acrPopover')
Gerçek derecelendirme değerinin başlık özelliğinde bulunduğunu unutmayın:
rating_text = rating_element.attrs.get('title')
print(rating_text)
# prints '4.6 out of 5 stars'
Son olarak sayısal derecelendirmeyi elde etmek için değiştirme yöntemini kullanın:
rating = rating_text.replace('out of 5 stars', '')
Ürün Fiyatını Çıkarma
Ürün fiyatı, ürün başlığının altında ve Şimdi Satın Al kutusunun içinde olmak üzere iki yerde bulunabilir.
Amazon ürün fiyatlarını düşürmek için bu etiketlerden herhangi biri kullanılabilir.
Fiyat için bir CSS seçici oluşturun:
#price_inside_buybox
Bu CSS seçiciyi BeautifulSoup'un select_one yöntemine şu şekilde iletin:
price_element = soup.select_one('#price_inside_buybox')
Artık fiyatı yazdırabilirsiniz:
print(price_element.text)
Görüntü Çıkarılıyor
Varsayılan görüntüyü kazımak için CSS seçici #landingImage'ı kullanın. Bu bilgilerle resim URL'sini src özelliğinden almak için aşağıdaki kod satırlarını yazabilirsiniz:
image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')
Ürün Açıklamasını Çıkarma
Amazon ürün verilerini çıkarmanın bir sonraki adımı ürün açıklamasını elde etmektir.
Süreç tutarlı kalır; bir CSS seçici oluşturun ve select_one yöntemini kullanın.
Açıklamanın CSS seçicisi:
#productDescription
Bu, öğeyi şu şekilde çıkarmamızı sağlar:
description_element = soup.select_one('#productDescription')
print(description_element.text)
Ürün Listelemeyi Yönetme
Ürün bilgilerini kazımayı araştırdık, ancak ürün verilerine erişmek için ürün listeleme veya kategori sayfalarıyla başlamanız gerekir.
Örneğin, https://www.amazon.com/b?node=12097479011 kulak üstü kulaklıkların kategori sayfasıdır.
Bu sayfayı incelerseniz, tüm ürünlerin benzersiz bir özelliğe [data-asin] sahip bir div içerisinde yer aldığını göreceksiniz. Bu div içindeki tüm ürün bağlantıları bir h2 etiketindedir.
Bu bilgilerle CSS Seçici şu şekildedir:
[data-asin] h2 a
Bu seçicinin href özelliğini okuyabilir ve bir döngü çalıştırabilirsiniz. Ancak bağlantıların göreceli olacağını unutmayın. Bu bağlantıları ayrıştırmak için urljoin yöntemini kullanmanız gerekir.
from urllib.parse import urljoin
...
def parse_listing(listing_url):
…
link_elements = soup_search.select("[data-asin] h2 a")
page_data = []
for link in link_elements:
full_url = urljoin(search_url, link.attrs.get("href"))
product_info = get_product_info(full_url)
page_data.append(product_info)
Sayfalandırmayı Yönetme
Bir sonraki sayfanın bağlantısı “Sonraki” metnini içeren bir bağlantıdadır. Bu bağlantıyı CSS'nin include operatörünü kullanarak aşağıdaki şekilde arayabilirsiniz:
next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
next_page_url = next_page_el.attrs.get('href')
next_page_url = urljoin(listing_url, next_page_url)
Amazon Verilerini Dışa Aktarma
Kazınan veriler kasıtlı olarak sözlük olarak döndürülür. Kazınmış tüm ürünleri içeren bir liste oluşturabilirsiniz.
def parse_listing(listing_url):
...
page_data = [] for link in link_elements:
...
product_info = get_product_info(full_url)
page_data.append(product_info)
Daha sonra bir Pandas DataFrame nesnesi oluşturmak için bu page_data'yı kullanabilirsiniz:
df = pd.DataFrame(page_data)
df.to_csv('headphones.csv', index = False)
Amazon'da Birden Çok Sayfa Nasıl Kazılır
Amazon'da birden fazla sayfayı kazımak, analiz edilecek daha geniş bir veri kümesi sağlayarak web kazıma projenizin etkinliğini artırabilir. Birden fazla sayfayı hedeflerken, içeriği birkaç sayfaya bölme işlemi olan sayfalandırmayı dikkate almanız gerekir.
Burada Akılda tutulması gereken 6 önemli nokta Amazon'da birden fazla sayfayı kazırken:
- Sayfalandırma modelini tanımlayın: Öncelikle Amazon'un içeriğini nasıl sayfalandırdığını anlamak için kategorinin veya arama sonuçları sayfalarının URL yapısını analiz edin. Bu bir sorgu parametresi (örneğin, “?page=2”) veya URL'ye yerleştirilmiş benzersiz bir tanımlayıcı olabilir.
- “Sonraki” sayfa bağlantısını çıkarın: Sonraki sayfaya giden bağlantıyı içeren öğeyi (genellikle bir bağlantı etiketi) bulun. Bir sonraki sayfanın URL'si olan bu öğenin href niteliğini çıkarmak için uygun CSS seçiciyi veya Güzel Çorba yöntemini kullanın.
- Göreli URL'leri mutlak URL'lere dönüştürün: Çıkarılan URL'ler göreceli olabileceğinden,
urljoin
işleviurllib.parse
bunları mutlak URL'lere dönüştürmek için kitaplık. - Bir döngü oluşturun: Sayfalar arasında yinelenen ve her birinden istenen verileri alan bir döngü uygulayın. Döngü, başka sayfa kalmayıncaya kadar devam etmelidir; bu, mevcut sayfada "Sonraki" sayfa bağlantısının olup olmadığı kontrol edilerek belirlenebilir.
- İstekler arasına gecikmeler ekleyin: Amazon sunucusunun aşırı yüklenmesini veya anti-bot önlemlerinin tetiklenmesini önlemek için, istekler arasında gecikmeler sağlayın.
time.sleep()
işlevitime
kütüphane. İnsan tarama davranışını taklit etmek için gecikme süresini ayarlayın. - CAPTCHA'ları ve blokları yönetme: Birden fazla sayfayı kazırken CAPTCHA'larla veya IP bloklarıyla karşılaşırsanız, IP adreslerini döndürmek için proxy'ler veya bu zorlukları otomatik olarak çözebilecek özel kazıma araçları ve hizmetleri kullanmayı düşünün.
Aşağıda, Amazon'un web sitesindeki birden fazla sayfadan veri çıkarma sürecinde size yol gösterecek kapsamlı bir YouTube video eğitimi bulacaksınız. Eğitim, çok sayıda Amazon sayfasından değerli bilgileri verimli ve etkili bir şekilde toplamanızı sağlayacak tekniklere odaklanarak web kazıma dünyasının derinliklerine iniyor.
Eğitim boyunca sunucu, Python, BeautifulSoup ve istekler gibi temel araç ve kitaplıkların kullanımını gösterirken Amazon'un anti-bot mekanizmaları tarafından engellenmeyi veya tespit edilmeyi önlemek için en iyi uygulamaları vurguluyor. Videoda sayfalandırmanın ele alınması, hız sınırlarının yönetilmesi ve insan benzeri tarama davranışının taklit edilmesi gibi temel konular ele alınmaktadır.
Videoda sağlanan adım adım talimatlara ek olarak, eğitimde ayrıca web kazıma deneyiminizi optimize etmek için yararlı ipuçları ve püf noktaları da paylaşılmaktadır. Bunlar arasında IP kısıtlamalarını atlamak için proxy'lerin kullanılması, Kullanıcı Aracısı ve istek başlıklarının rastgele seçilmesi ve sorunsuz ve kesintisiz bir kazıma süreci sağlamak için uygun hata işlemenin uygulanması yer alır.
Amazon'u Kazımak: SSS
Popüler bir e-ticaret platformu olan Amazon'dan veri çekerken dikkat edilmesi gereken bazı şeyler vardır. Amazon verilerinin kazınmasıyla ilgili sık sorulan sorulara dalalım.
1. Amazon'u Kazımak Yasal mı?
İnternetten halka açık verilerin kazınması yasaldır ve buna Amazon'un kazınması da dahildir. Ürün ayrıntıları, açıklamalar, derecelendirmeler ve fiyatlar gibi bilgileri yasal olarak kazıyabilirsiniz. Ancak ürün incelemelerini kazırken kişisel veriler ve telif hakkı koruması konusunda dikkatli olmalısınız. Örneğin, incelemeyi yapanın adı ve avatarı kişisel veri teşkil edebilirken, inceleme metni telif hakkıyla korunuyor olabilir. Bu tür verileri kazırken daima dikkatli olun ve yasal tavsiye alın.
2. Amazon Kazımaya İzin Veriyor mu?
Herkese açık verilerin kazınması yasal olsa da Amazon bazen kazımayı önlemek için önlemler alır. Bu önlemler arasında hız sınırlayıcı istekler, IP adreslerinin yasaklanması ve kazıma botlarını tespit etmek için tarayıcı parmak izinin kullanılması yer alıyor. Amazon genellikle web kazımayı 200 OK başarı durumu yanıt koduyla engeller ve ücretli bir API için satış ekibiyle iletişime geçmek için bir CAPTCHA'yı geçmenizi gerektirir veya bir HTTP Hatası 503 Hizmet Kullanılamıyor mesajı görüntüler.
Bu önlemleri atlatmanın yolları var, ancak etik web kazıma, ilk etapta bunların tetiklenmesini önlemeye yardımcı olabilir. Etik web kazıma, istek sıklığının sınırlandırılmasını, uygun kullanıcı aracılarının kullanılmasını ve web sitesi performansını etkileyebilecek aşırı kazımanın önlenmesini içerir. Etik olarak kazıma yaparak, Amazon'dan yararlı veriler almaya devam ederken yasaklanma veya yasal sonuçlarla karşı karşıya kalma riskini azaltabilirsiniz.
3. Amazon Verilerini Kazımak Etik Midir?
Etik olarak kazıma, hedef web sitesine saygı göstermeyi içerir. Amazon web sitesine çok fazla istek yüklemeniz pek mümkün olmasa da yine de etik kazıma kurallarına uymalısınız. Etik kazıma, yasal sorunlarla karşılaşma veya kazıma karşıtı önlemlerle uğraşma riskini en aza indirebilir.
4. Amazon'u Kazıırken Yasaklanmayı Nasıl Önleyebilirim?
Amazon'u kazırken yasaklanmayı önlemek için istek oranlarınızı sınırlamalı, yoğun saatlerde kazıma yapmaktan kaçınmalı, akıllı proxy rotasyonunu kullanmalı ve tespit edilmekten kaçınmak için uygun kullanıcı aracıları ve başlıkları kullanmalısınız. Ek olarak, yalnızca ihtiyacınız olan verileri çıkarın ve üçüncü taraf kazıma araçlarını veya kazıma kitaplıklarını kullanın.
5. Amazon'u Kazımanın Riskleri Nelerdir?
Amazon verilerinin kazınması, yasal işlem ve hesabın askıya alınması gibi potansiyel riskler taşır. Amazon, kazımayı tespit etmek ve önlemek için IP adresi yasakları, hız sınırlaması ve tarayıcı parmak izi alma dahil olmak üzere anti-bot önlemlerini kullanır. Ancak etik olarak kazıyarak bu riskleri azaltabilirsiniz.
Çözüm
Amazon web kazımanın büyüleyici labirentinden çıktığımızda, bu heyecan verici yolculukta topladığımız paha biçilmez bilgi ve becerileri takdir etmek için biraz zaman ayırmanın zamanı geldi. Güvenilir rehberiniz ProxyCompass'la, perakende devinden paha biçilemez verileri çıkarmanın tüm karmaşıklıklarını ve dönüşlerini başarıyla aştınız. Yeni keşfettiğiniz uzmanlığınızı ustalıkla kullanarak ileriye doğru atılım yaparken, dijital ormanın gelişmeyi asla durdurmadığını unutmayın.
Meraklı kalın, web kazıma palanızı keskinleştirmeye devam edin ve sürekli değişen veri çıkarma ortamını fethetmeye devam edin. Bir sonraki cesur keşif gezimize kadar cesur kaşif, veriye dayalı görevleriniz verimli ve ödüllendirici olsun!