Etsy Arama Sonuçlarını Fiyata Göre Sıralayarak Veri Çekme: 0.065 Dolar Değerindeki Ürünleri Keşfetmek
Dijital çağda, e-ticaret platformları devasa bir ürün ve fiyat veri havuzu sunar. Ancak bu bilgileri manuel olarak taramak, özellikle belirli kriterlere uyan binlerce ürünü karşılaştırmak gerektiğinde, imkansıza yakın bir görev haline gelebilir. Peki, Etsy gibi büyük bir pazar yerinde, belirli bir fiyata sahip veya o fiyata çok yakın, en ucuz 10 ürünü hızlıca nasıl bulabilirsiniz? Bu makale, web scraping (veri kazıma) tekniklerini kullanarak Etsy arama sonuçlarını fiyata göre sıralayıp, tam olarak 0.065 dolarlık veya bu fiyata yakın en düşük maliyetli ürünleri programatik olarak nasıl keşfedeceğinizi adım adım açıklıyor.
Giriş: Dijital Pazar Yerlerinde Gizli Fırsatları Nasıl Yakalarız?
Günümüzün rekabetçi e-ticaret dünyasında, doğru bilgiye hızlı erişim, işletmeler ve bireysel alıcılar için hayati önem taşımaktadır. Etsy, el yapımı ve vintage ürünlerin eşsiz dünyasını barındıran, yaratıcı ruhların buluşma noktasıdır. Bu platformda, bazen inanılmaz derecede uygun fiyatlı, benzersiz ürünler bulmak mümkündür. Ancak, platformun milyonlarca ürünü arasında, özellikle belirli bir fiyat noktasına odaklanarak, en cazip fırsatları manuel olarak tespit etmek, iğneyle kuyu kazmaya benzer.
Örneğin, bir proje için çok spesifik ve düşük maliyetli bir el yapımı bileşene mi ihtiyacınız var? Ya da rakip analizi yaparken, rakiplerinizin en düşük fiyatlı ürün stratejilerini mi merak ediyorsunuz? İşte bu noktada web scraping devreye giriyor. Web scraping, internet sitelerinden otomatik olarak veri toplama işlemidir. Bu sayede, Etsy gibi dinamik platformlardan ürün adları, fiyatlar, açıklamalar ve hatta görseller gibi yapılandırılmış verileri programatik olarak çekebiliriz. Bu süreç, sadece zaman tasarrufu sağlamakla kalmaz, aynı zamanda insan gözünün kaçırabileceği desenleri ve fırsatları ortaya çıkarır.
Bu makalede, Python programlama dilini ve popüler web scraping kütüphanelerini kullanarak, Etsy’nin arama sonuçlarını nasıl hedefleyeceğimizi, fiyata göre nasıl sıralayacağımızı ve özellikle “0.065 dolar” gibi çok spesifik bir düşük fiyat noktasındaki ilk 10 ürünü nasıl çekeceğimizi detaylı bir şekilde inceleyeceğiz. Süreç boyunca, temelden başlayarak, bu tür platformların dinamik yapısıyla başa çıkmak için ileri düzey tekniklere de değineceğiz. Amacımız, okuyucunun konuya sıfırdan başlayıp, kendi veri çekme projelerini hayata geçirebilecek bilgi birikimine ulaşmasını sağlamaktır. Bu yolculukta, yasal ve etik sınırlara dikkat etmenin önemini de vurgulayacağız, çünkü web scraping güçlü bir araçtır ve sorumlu bir şekilde kullanılması gerekir.
Web Scraping Nedir ve Etsy İçin Neden Önemlidir?
Web scraping (veri kazıma), bir web sitesindeki verileri otomatik olarak çekme ve genellikle daha yapılandırılmış bir formatta (CSV, JSON, veritabanı gibi) kaydetme işlemidir. Bu teknik, veri analizi, pazar araştırması, rekabet analizi, fiyat takibi ve içerik toplama gibi birçok alanda kullanılır. Temel olarak, bir web tarayıcısının yaptığı işi programatik olarak taklit eder: bir URL’ye istek gönderir, HTML içeriğini alır ve bu içerik içinden istenen bilgileri ayıklayarak toplar.
Etsy gibi büyük bir e-ticaret platformu için web scraping’in önemi birkaç ana başlık altında toplanabilir:
- Pazar Araştırması ve Trend Analizi: Etsy’deki milyonlarca ürün arasında belirli kategorilerdeki popüler ürünleri, renkleri, materyalleri veya tasarımları belirlemek, yeni bir ürün geliştirme veya pazarlama stratejisi oluşturma konusunda değerli bilgiler sunar. Hangi ürünlerin düşük fiyata satıldığını gözlemlemek, pazarın alt ucundaki dinamikleri anlamanıza yardımcı olabilir.
- Rekabet Analizi: Rakiplerinizin ürünlerini, fiyatlandırma stratejilerini, ürün açıklamalarını ve müşteri yorumlarını sistematik olarak izlemek, kendi iş modelinizi optimize etmeniz için kritik veriler sağlar. Özellikle düşük fiyatlı ürünlerdeki rekabeti anlamak, pazar giriş stratejileri için önemlidir.
- Fiyat Takibi ve Fırsat Keşfi: Belirli ürünlerin fiyat değişimlerini izlemek veya belirli bir fiyat noktasının altındaki ürünleri sürekli olarak aramak, alıcılar için en iyi fırsatları yakalamanın veya satıcılar için rekabetçi fiyatlandırma yapmanın anahtarıdır. 0.065 dolar gibi çok düşük bir fiyat noktası, genellikle indirimli veya özel promosyon ürünlerini işaret edebilir.
- Envanter Yönetimi ve Ürün Çeşitliliği: Bir satıcıysanız, benzer ürünlerin stok durumunu ve çeşitliliğini takip ederek kendi envanterinizi daha etkin yönetebilir, eksik gördüğünüz alanlarda yeni ürünler sunabilirsiniz.
Yasal ve Etik Sınırlar: Web Scraping Yaparken Nelere Dikkat Etmeli?
Web scraping güçlü bir araç olsa da, yasal ve etik sorumlulukları beraberinde getirir. Bu konuda dikkat edilmesi gereken bazı temel noktalar şunlardır:
- robots.txt Dosyası: Çoğu web sitesi,
robots.txtadında bir dosya barındırır. Bu dosya, web tarayıcılarına ve botlara sitenin hangi bölümlerinin taranabileceğini veya taranmaması gerektiğini belirtir. Bu kurallara uymak, etik bir yaklaşımdır. - Kullanım Koşulları (Terms of Service): Birçok web sitesinin kullanım koşullarında, otomatik veri toplama veya scraping açıkça yasaklanmıştır. Bu koşulları ihlal etmek yasal sonuçlar doğurabilir. Etsy’nin kullanım koşullarını incelemek önemlidir.
- Siteye Aşırı Yüklenmeme: Web sitesine çok sık veya çok hızlı istek göndermek, sitenin sunucularına aşırı yük bindirebilir ve hizmetin aksamasına neden olabilir. Bu, hem etik dışıdır hem de IP adresinizin engellenmesine yol açabilir. İstekler arasına gecikmeler eklemek (
time.sleep()) önemlidir. - Kişisel Verilerin Korunması: Kişisel olarak tanımlanabilir bilgileri (PII) toplamak ve kullanmak, GDPR (Genel Veri Koruma Tüzüğü) ve KVKK (Kişisel Verilerin Korunması Kanunu) gibi yasalara tabidir. Bu tür verileri toplarken ve işlerken çok dikkatli olunmalıdır.
Bu makaledeki örnekler eğitim amaçlıdır ve sorumlu bir şekilde kullanılmalıdır. Etsy’nin kullanım koşullarını ve robots.txt dosyasını kontrol etmeden gerçek bir scraping projesi başlatmamanız tavsiye edilir.
Etsy Arama URL Yapısını Anlamak: Fiyata Göre Sıralama Nasıl Yapılır?
Etsy’den veri çekmeye başlamadan önce, platformun arama URL’lerinin nasıl yapılandırıldığını anlamak kritik öneme sahiptir. Çoğu web sitesinde olduğu gibi, Etsy de arama sorgularını, filtreleri ve sıralama seçeneklerini URL parametreleri aracılığıyla yönetir. Bu parametreleri doğru bir şekilde manipüle ederek, istediğimiz arama sonuçlarına doğrudan ulaşabiliriz.
Şimdi bir örnekle Etsy’de fiyata göre sıralamanın nasıl çalıştığını inceleyelim. Diyelim ki “handmade necklace” (el yapımı kolye) arıyoruz ve sonuçları fiyata göre en düşükten en yükseğe sıralamak istiyoruz. Normalde Etsy ana sayfasından bu aramayı yapıp, sonuç sayfasında “Sırala” seçeneğinden “En Düşük Fiyat”ı seçerdik. Bu işlemi yaptığınızda, tarayıcınızın adres çubuğundaki URL’nin değiştiğini fark edeceksiniz.
Genel bir Etsy arama URL’si şu şekilde görünebilir:
https://www.etsy.com/search?q=handmade+necklace
Bu URL’ye, fiyata göre sıralama parametresini eklediğimizde, genellikle şöyle bir yapıya dönüşür:
https://www.etsy.com/search?q=handmade+necklace&sort_by=price_asc
Burada:
q=handmade+necklace: Arama sorgumuzu (query) belirtir. Boşluklar+işareti ile temsil edilir.sort_by=price_asc: Sonuçları fiyata göre artan (ascending) sırada sıralamamızı sağlar. Eğer en yüksek fiyata göre sıralamak isteseydik, bu parametreprice_descolabilirdi.
Bazı durumlarda, Etsy gibi siteler daha karmaşık filtreleme seçenekleri sunabilir. Örneğin, belirli bir fiyat aralığı belirlemek için min_price ve max_price gibi parametreler olabilir. Ancak, 0.065 dolar gibi çok düşük bir fiyat için genellikle en düşük fiyata göre sıralama yapmak ve ardından çekilen veriyi filtrelemek daha pratik bir yaklaşımdır. Etsy’nin kendi arayüzünde bu kadar hassas bir fiyat aralığı filtresi bulunmayabilir.
Hedef Fiyat Aralığı ve En Düşük Fiyatlı Ürünleri Hedefleme Stratejisi
0.065 dolarlık bir ürün bulmak için en etkili strateji, önce mümkün olan en düşük fiyatlı ürünleri listeleyen bir arama yapmak ve ardından çekilen veriler içinde bu spesifik fiyatı veya ona en yakın olanları bulmaktır. Çünkü Etsy’nin doğrudan 0.065 dolarlık bir filtre sunması beklenemez. Bu nedenle, ilk adımımız, sort_by=price_asc parametresini kullanarak en ucuz ürünleri hedeflemek olacaktır. Daha sonra, elde ettiğimiz ürün listesinden fiyatları kontrol edip, 0.065 dolara eşit veya çok yakın olan ilk 10 ürünü seçeceğiz.
Bu yaklaşım, özellikle Etsy gibi platformlarda, ürün fiyatlarının genellikle tam sayılar veya belirli küsuratlarla (örneğin 0.50, 0.99) listelendiği, ancak 0.065 gibi çok spesifik ve ondalıklı bir değerin nadir olduğu durumlarda önemlidir. Eğer hiçbir ürün tam olarak 0.065 dolar değilse, stratejimiz en düşük fiyatlı 10 ürünü çekmek ve bunları 0.065 dolar hedefimizle karşılaştırmak olacaktır. Böylece, hedefimize en yakın veya genel olarak en ucuz ürünleri elde etmiş oluruz.
Bu URL yapısını anladıktan sonra, Python ile HTTP istekleri göndererek bu sayfaların HTML içeriğini alabilir ve istediğimiz verileri ayıklamaya başlayabiliriz.
Temel Web Scraping Adımları: Python ile Etsy Verilerini Çekme
Şimdi, Python kullanarak Etsy’den veri çekme sürecini adım adım uygulayalım. Bu bölümde, HTTP isteği göndermek, HTML içeriğini ayrıştırmak ve ürün bilgilerini (isim, fiyat, link, görsel URL) çıkarmak için gerekli temel adımları ve kod örneklerini ele alacağız.
Gerekli Kütüphanelerin Kurulumu
İlk olarak, Python projemiz için gerekli kütüphaneleri yüklememiz gerekiyor. Bu proje için requests (HTTP istekleri için) ve BeautifulSoup4 (HTML ayrıştırma için) kütüphanelerini kullanacağız.
pip install requests beautifulsoup4
HTTP İsteği Gönderme ve HTML İçeriğini Alma
Kütüphaneler yüklendikten sonra, Etsy’nin arama sayfasına bir HTTP GET isteği gönderebiliriz. İstek gönderirken, web sitesinin bot olduğumuzu anlamasını zorlaştırmak için bir User-Agent başlığı eklemek iyi bir uygulamadır. Bu başlık, isteğin bir web tarayıcısından geldiğini simüle eder.
Arama URL’miz olarak “handmade” kelimesini arayacağız ve sonuçları fiyata göre en düşükten en yükseğe sıralayacağız. Bu, 0.065 dolarlık ürünleri bulma hedefimiz için en uygun başlangıç noktasıdır.
import requests
from bs4 import BeautifulSoup
import time # İstekler arasına gecikme eklemek için
# Etsy arama URL'si: "handmade" kelimesini ara ve fiyata göre en düşükten en yükseğe sırala
search_query = "handmade"
etsy_url = f"https://www.etsy.com/search?q={search_query}&sort_by=price_asc"
# Tarayıcıyı taklit etmek için User-Agent başlığı
headers = {
"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"
}
# HTTP GET isteği gönderme
try:
response = requests.get(etsy_url, headers=headers)
response.raise_for_status() # HTTP hata kodları için istisna fırlatır (4xx veya 5xx)
html_content = response.text
print("Sayfa başarıyla çekildi.")
except requests.exceptions.RequestException as e:
print(f"Hata oluştu: {e}")
html_content = None
# Etik kullanım için istekler arasına kısa bir gecikme ekleyelim
time.sleep(2) # 2 saniye bekle
HTML İçeriğini Ayrıştırma ve Ürün Bilgilerini Bulma
HTML içeriğini başarıyla çektikten sonra, BeautifulSoup kullanarak bu içeriği ayrıştırmamız ve istediğimiz ürün bilgilerini (isim, fiyat, link, görsel URL) bulmamız gerekiyor. Bu adım, web sitesinin HTML yapısını anlamayı gerektirir. Tarayıcınızın geliştirici araçlarını (F12) kullanarak ürün kartlarının, başlıkların, fiyatların ve diğer elemanların hangi HTML etiketleri ve CSS sınıfları içinde yer aldığını incelemeniz gerekecektir.
Etsy’nin dinamik bir yapıya sahip olması nedeniyle, bu seçiciler zaman zaman değişebilir. Ancak genel olarak, ürün kartları belirli bir div veya li etiketi içinde yer alır ve her bir ürünün adı, fiyatı, linki ve görseli bu kartın içindeki alt etiketlerde bulunur. Aşağıdaki örnek, tipik bir Etsy ürün listeleme yapısına dayanmaktadır. Kendi denemelerinizde, güncel Etsy yapısına göre seçicileri ayarlamanız gerekebilir.
if html_content:
soup = BeautifulSoup(html_content, "html.parser")
# Ürün listeleme kartlarını bulmak için CSS seçici
# Bu seçici Etsy'nin mevcut HTML yapısına göre ayarlanmalıdır.
# Genellikle "ul" etiketi altında "li" veya "div" etiketleri ürün kartlarını temsil eder.
# Örnek: products = soup.find_all("div", class_="v2-listing-card__info") veya
# products = soup.select("li.wt-list-unstyled > div.wt-grid__item-xs-6") gibi
# En iyi sonucu almak için tarayıcınızın geliştirici araçlarını kullanın.
# Bu örnekte genel bir yaklaşımla, ürün listeleme öğelerini bulmaya çalışıyoruz.
# Gerçek Etsy yapısı için bu seçiciyi F12 ile kontrol etmelisiniz.
# Genellikle bir "div" veya "li" etiketinin belirli bir sınıfı olur.
# Örneğin, listeleme kartlarını içeren bir "div" ve içindeki başlık ve fiyat elementleri.
# Aşağıdaki seçici sadece bir tahminidir ve güncel Etsy yapısına göre değişebilir.
product_listings = soup.select("div[data-listing-id]") # data-listing-id olan divleri dene
if not product_listings:
# Alternatif bir seçici deneyelim, bu kısım çok değişkenlik gösterebilir.
# Genellikle ürün kartları için kullanılan yaygın bir yapı:
product_listings = soup.select("li.wt-grid__item-xs-6") # Genellikle listeleme öğeleri bu şekilde olur
if not product_listings:
product_listings = soup.select("div.listing-card") # Eski veya farklı bir yapı
products_data = []
for product in product_listings[:20]: # İlk 20 ürünü inceleyelim, daha sonra 10'a filtreleriz
title_element = product.select_one("h3.wt-text-caption")
price_element = product.select_one("span.currency-value") # Fiyat değeri
link_element = product.select_one("a.listing-link")
image_element = product.select_one("img.wt-max-width-full")
title = title_element.text.strip() if title_element else "Başlık Bulunamadı"
price_str = price_element.text.strip() if price_element else "Fiyat Bulunamadı"
product_link = link_element["href"] if link_element and "href" in link_element.attrs else "Link Bulunamadı"
image_url = image_element["src"] if image_element and "src" in image_element.attrs else "Görsel Bulunamadı"
# Fiyatı sayısal değere dönüştürme ve temizleme
try:
# Fiyat stringini temizle: Para birimi sembollerini ve virgülleri kaldır
cleaned_price_str = price_str.replace("$", "").replace(",", "").strip()
price = float(cleaned_price_str)
except ValueError:
price = None # Dönüştürülemezse None olarak işaretle
products_data.append({
"title": title,
"price": price,
"link": product_link,
"image_url": image_url
})
print(f"Toplam {len(products_data)} ürün çekildi.")
# print(products_data) # Çekilen verileri görmek için yorum satırını kaldırabilirsiniz.
Yukarıdaki kod bloğu, Etsy’nin HTML yapısındaki olası değişikliklere karşı birkaç farklı CSS seçici denemesi içermektedir. En doğru seçiciyi bulmak için her zaman güncel bir tarayıcı geliştirici aracı kullanmanız ve sayfanın HTML yapısını incelemeniz önerilir. .select_one() metodu, belirtilen seçiciye uyan ilk öğeyi bulurken, .select() ise tüm eşleşen öğeleri bir liste olarak döndürür.
Verileri Filtreleme ve İşleme: 0.065 Dolar Hedefine Ulaşmak
Etsy’den çektiğimiz ürün verileri ham halde gelir ve genellikle para birimi sembolleri, virgüller veya diğer gereksiz karakterler içerir. 0.065 dolar gibi spesifik bir fiyat hedefimiz olduğu için, bu fiyat stringlerini sayısal değerlere dönüştürmek ve ardından filtreleme yapmak zorundayız. Bu bölümde, çekilen verileri nasıl temizleyeceğimizi, sayısal değerlere dönüştüreceğimizi ve hedef fiyatımıza en yakın ilk 10 ürünü nasıl seçeceğimizi adım adım ele alacağız.
Çekilen Fiyat Verilerini Temizleme ve Sayısal Değere Dönüştürme
Önceki adımda price_str değişkeni ile çektiğimiz fiyat bilgisi genellikle “$0.065” veya “£1,20” gibi bir string formatında olacaktır. Python’da bu değeri matematiksel işlemler için kullanabilmek adına, para birimi sembollerini, binlik ayırıcıları (virgül) kaldırmamız ve string’i bir float (ondalıklı sayı) değere dönüştürmemiz gerekir.
Örnek olarak, “$0.065” string’ini 0.065 float değerine dönüştürelim. Bu işlem, her bir ürünün fiyatı için yapılmalıdır.
# products_data listesindeki her ürün için fiyatı temizleyip sayısal değere dönüştürme
cleaned_products = []
for product in products_data:
if product["price"] is not None: # Fiyat başarıyla dönüştürüldüyse devam et
cleaned_products.append(product)
# Fiyatı olmayan veya dönüştürülemeyen ürünleri filtreledik
# Şimdi fiyatlarına göre sıralayalım (zaten fiyata göre artan sırada çekmiştik ama emin olalım)
cleaned_products.sort(key=lambda x: x["price"])
print(f"Temizlenmiş ve sıralanmış {len(cleaned_products)} ürün.")
Hedef Fiyatı Filtreleme ve İlk 10 Ürünü Seçme
Şimdi elimizde fiyatları sayısal olarak ifade edilmiş ve en düşükten en yükseğe sıralanmış bir ürün listesi var. Hedefimiz 0.065 dolarlık veya bu fiyata en yakın ilk 10 ürünü bulmak. Etsy’de tam olarak 0.065 dolarlık ürün bulmak zor olabilir. Bu nedenle, iki strateji izleyebiliriz:
- Tam Eşleşme Arayışı: Eğer tam olarak 0.065 dolarlık ürünler varsa, bunları seçmek.
- En Yakın Değerler: Eğer tam eşleşme yoksa, 0.065 dolara en yakın fiyatlı ürünleri veya genel olarak en düşük fiyatlı ilk 10 ürünü seçmek.
Aşağıdaki kod bloğu, bu iki stratejiyi birleştirerek hedefimize ulaşmamızı sağlar:
target_price = 0.065
tolerance = 0.001 # Hedef fiyata yakınlık için bir tolerans değeri belirleyelim (örn: 0.064 - 0.066 arası)
# Hedef fiyata tam veya çok yakın olan ürünleri bulalım
filtered_products = []
for product in cleaned_products:
if product["price"] is not None and abs(product["price"] - target_price) <= tolerance:
filtered_products.append(product)
# Eğer hedef fiyata yakın 10 veya daha fazla ürün bulduysak, ilk 10'unu alalım
if len(filtered_products) >= 10:
final_products = filtered_products[:10]
print(f"Hedef fiyat olan {target_price}$'a yakın {len(final_products)} ürün bulundu.")
else:
# Eğer yeterli sayıda ürün bulunamadıysa, genel olarak en düşük fiyatlı ürünlerden tamamlayalım
# Veya sadece bulunanları gösterelim. Bu durumda, en düşük fiyatlı ürünler listemizden
# kalanları alabiliriz.
print(f"Hedef fiyata yakın yeterli ürün bulunamadı ({len(filtered_products)} adet).")
print("Genel olarak en düşük fiyatlı ilk 10 ürünü gösteriyoruz.")
final_products = cleaned_products[:10] # En düşük fiyatlı ilk 10 ürün
print("\n--- Çekilen ve Filtrelenen Ürünler (İlk 10) ---")
for i, product in enumerate(final_products):
print(f"{i+1}. Başlık: {product['title']}")
print(f" Fiyat: ${product['price']:.3f}") # Fiyatı 3 ondalık basamakla göster
print(f" Link: {product['link']}")
print(f" Görsel: {product['image_url']}")
print("-" * 30)
Bu kod bloğu, öncelikle target_price (0.065 dolar) ve tolerance (0.001 dolar) kullanarak hedef fiyata çok yakın ürünleri filtreler. Eğer bu filtreleme sonucunda 10 veya daha fazla ürün bulunursa, bu ürünlerin ilk 10’unu alırız. Eğer yeterli sayıda ürün bulunamazsa, cleaned_products listesinden (yani en düşük fiyata göre sıralanmış tüm ürünlerden) ilk 10’unu alarak, en ucuz 10 ürünü garanti etmiş oluruz. Bu esneklik, tam olarak 0.065 dolarlık ürünlerin az bulunma ihtimaline karşı bir önlem niteliğindedir.
Sonuç olarak, bu adımlarla Etsy’den çekilen ham veriyi anlamlı ve kullanılabilir bir formata dönüştürdük ve belirli bir fiyat hedefine göre filtreleme yaparak istediğimiz ilk 10 ürüne ulaştık. Bu veriler artık bir CSV dosyasına kaydedilebilir, bir veritabanına aktarılabilir veya daha ileri analizler için kullanılabilir.
İleri Seviye Teknikler ve Zorluklar: Etsy’nin Kalkanını Aşmak
Yukarıdaki temel scraping teknikleri, basit statik sayfalar için yeterli olabilir. Ancak Etsy gibi büyük ve dinamik e-ticaret platformları, web scraping’i zorlaştıran çeşitli mekanizmalar kullanır. Bu bölümde, bu zorlukların üstesinden gelmek için kullanabileceğimiz ileri seviye teknikleri ve stratejileri ele alacağız.
Dinamik İçerik ve JavaScript: Selenium’un Devreye Girmesi
Etsy gibi modern web siteleri, sayfa içeriğinin büyük bir kısmını JavaScript kullanarak dinamik olarak yükler. Bu, sayfa ilk yüklendiğinde HTML içeriğinde tüm verilerin bulunmayabileceği anlamına gelir. requests kütüphanesi yalnızca sunucudan gelen ilk HTML’i çeker ve JavaScript tarafından oluşturulan içeriği görmez. İşte bu noktada Selenium gibi bir otomasyon aracı devreye girer.
Selenium, gerçek bir web tarayıcısını (Chrome, Firefox vb.) programatik olarak kontrol etmenizi sağlar. Bu sayede, tarayıcı sayfayı tamamen yükler, JavaScript’i çalıştırır ve tüm dinamik içeriği oluşturur. Ardından, BeautifulSoup veya Selenium’un kendi eleman bulma yöntemlerini kullanarak bu tam yüklenmiş sayfadan veri çekebilirsiniz.
Selenium’u kullanmak için öncelikle yüklemeniz ve kullandığınız tarayıcıya uygun bir WebDriver (örneğin Chrome için ChromeDriver) indirmeniz gerekir:
pip install selenium webdriver_manager
Daha sonra, Selenium ile bir tarayıcı başlatabilir ve Etsy sayfasını ziyaret edebilirsiniz:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# Headless modda çalıştırmak için seçenekler (tarayıcı penceresi açılmaz)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless") # Tarayıcıyı görünmez yapar
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument(f"user-agent={headers['User-Agent']}") # User-Agent ekleme
# WebDriver'ı başlatma
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
try:
driver.get(etsy_url)
# Sayfanın tamamen yüklenmesini bekleyelim (örneğin, belirli bir elementin görünmesini)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-listing-id]")) # Ürün kartlarının yüklenmesini bekle
)
# Sayfa kaynağını çek
html_content_selenium = driver.page_source
soup_selenium = BeautifulSoup(html_content_selenium, "html.parser")
# Buradan sonra BeautifulSoup ile ürünleri çekme adımlarını tekrar uygulayabilirsiniz.
# Örneğin: product_listings_selenium = soup_selenium.select("div[data-listing-id]")
# ...
print("Selenium ile sayfa içeriği çekildi.")
finally:
driver.quit() # Tarayıcıyı kapat
Selenium, sayfayı kaydırma (scroll), butonlara tıklama gibi kullanıcı etkileşimlerini de simüle edebilir, bu da sonsuz kaydırma (infinite scroll) veya sayfalama (pagination) gibi durumlarla başa çıkmak için çok kullanışlıdır.
IP Engellemeleri ve Vekil Sunucular (Proxies)
Web siteleri, aşırı istek gönderen veya şüpheli görünen IP adreslerini tespit edip engelleyebilir. Bu, scraping işleminizin kesintiye uğramasına neden olur. Bu sorunu aşmak için vekil sunucular (proxies) kullanılır.
- Neden Gerekli? Vekil sunucu, internet trafiğinizi kendi sunucusu üzerinden yönlendirir ve web sitesine sizin yerine vekil sunucunun IP adresiyle istek gönderir. Farklı vekil sunucular kullanarak, isteklerinizin farklı IP adreslerinden gelmesini sağlayabilir ve engellenme riskini azaltabilirsiniz.
- Nasıl Kullanılır? Ücretsiz vekil sunucular bulabilir (güvenilirliği düşüktür) veya ücretli, daha güvenilir ve hızlı vekil sunucu hizmetleri satın alabilirsiniz. Python
requestskütüphanesi, vekil sunucu kullanımını kolayca destekler:
proxies = {
"http": "http://user:pass@10.10.1.10:3128",
"https": "http://user:pass@10.10.1.10:1080",
}
# response = requests.get(etsy_url, headers=headers, proxies=proxies)
Selenium ile vekil sunucu kullanmak biraz daha karmaşıktır ve tarayıcı seçenekleri üzerinden yapılandırılması gerekir.
CAPTCHA ve Anti-Bot Mekanizmaları
Etsy gibi siteler, bot trafiğini engellemek için CAPTCHA (reCAPTCHA gibi), Honeypot tuzakları, JavaScript tabanlı bot algılama algoritmaları ve davranış analizi gibi gelişmiş anti-bot mekanizmaları kullanır. Bunlarla başa çıkmak scraping’in en zorlu kısımlarından biridir.
- CAPTCHA: CAPTCHA’lar, genellikle manuel müdahale gerektirir. Otomatik CAPTCHA çözme hizmetleri (örneğin 2Captcha, Anti-Captcha) bulunsa da, bunlar ek maliyet ve karmaşıklık getirir.
- Davranış Simülasyonu: Selenium kullanarak fare hareketleri, klavye girişi ve rastgele gecikmeler ekleyerek insan benzeri davranışları simüle etmek, bot algılama sistemlerini atlatmaya yardımcı olabilir.
- Headless Olmayan Tarayıcılar: Bazen, headless modda (görünmez tarayıcı) çalışmak, bot olarak algılanma riskini artırabilir. Headless olmayan bir tarayıcı kullanmak (yani tarayıcı penceresinin açılmasına izin vermek), bazı bot algılama sistemlerini atlatabilir.
Veri Saklama: Çekilen Verileri CSV veya JSON Formatında Kaydetme
Çektiğiniz verileri bellekte tutmak yerine kalıcı bir depolama formatına kaydetmek önemlidir. CSV (Comma Separated Values) ve JSON (JavaScript Object Notation) en yaygın kullanılan formatlardır.
import csv
import json
# CSV olarak kaydetme
csv_file = "etsy_products.csv"
if final_products:
keys = final_products[0].keys()
with open(csv_file, 'w', newline='', encoding='utf-8') as output_file:
dict_writer = csv.DictWriter(output_file, fieldnames=keys)
dict_writer.writeheader()
dict_writer.writerows(final_products)
print(f"\nVeriler '{csv_file}' dosyasına CSV formatında kaydedildi.")
# JSON olarak kaydetme
json_file = "etsy_products.json"
if final_products:
with open(json_file, 'w', encoding='utf-8') as output_file:
json.dump(final_products, output_file, indent=4, ensure_ascii=False)
print(f"Veriler '{json_file}' dosyasına JSON formatında kaydedildi.")
Zamanlama ve Otomasyon: Scraping Sürecini Periyodik Olarak Çalıştırma
Fiyat takibi veya trend analizi gibi sürekli veri ihtiyacı olan durumlar için scraping işlemini otomatik olarak belirli aralıklarla çalıştırmak isteyebilirsiniz. Bunun için:
- Python’da
scheduleKütüphanesi: Basit zamanlanmış görevler için kullanılabilir. - İşletim Sistemi Araçları: Linux’ta
cron, Windows’ta Görev Zamanlayıcı (Task Scheduler) veya Docker konteynerleri kullanarak scraping betiğinizi periyodik olarak çalıştırabilirsiniz. - Bulut Fonksiyonları: AWS Lambda, Google Cloud Functions gibi sunucusuz mimariler, scraping işlerini tetiklemek ve yönetmek için ölçeklenebilir ve uygun maliyetli bir yol sunar.
Bu ileri seviye teknikler, daha sağlam, güvenilir ve ölçeklenebilir web scraping çözümleri oluşturmanıza yardımcı olacaktır. Ancak, her zaman web sitesinin kullanım koşullarını ve etik ilkeleri göz önünde bulundurmayı unutmayın.
Vaka Analizi: Küçük İşletmeler İçin Rekabet Analizi
Web scraping’in sadece teknik bir egzersizden ibaret olmadığını, gerçek dünyada küçük işletmeler için somut faydalar sağlayabileceğini bir vaka analiziyle gösterelim. Hayal edin ki, Ayşe Hanım, Etsy’de el yapımı, kişiselleştirilmiş anahtarlıklar satan küçük bir işletme sahibidir. Ürünleri kaliteli olsa da, satışları istediği seviyede değildir ve rekabetin çok yoğun olduğunu hissetmektedir. Ayşe Hanım, pazarını daha iyi anlamak ve rekabet avantajı elde etmek için web scraping’i kullanmaya karar verir.
Senaryo: Ayşe Hanım’ın Anahtarlık İşletmesi
Ayşe Hanım’ın hedefleri şunlardır:
- Rakip Fiyatlandırmasını Anlamak: Benzer anahtarlıkların Etsy’de hangi fiyat aralıklarında satıldığını öğrenmek. Özellikle en düşük fiyatlı rakiplerin stratejilerini incelemek.
- Ürün Trendlerini ve Popüler Özellikleri Belirlemek: En çok satan anahtarlıkların hangi malzemelerden yapıldığını, hangi temaların popüler olduğunu veya hangi kişiselleştirme seçeneklerinin tercih edildiğini görmek.
- Pazar Boşluklarını Keşfetmek: Henüz yeterince sunulmayan veya rekabetin az olduğu niş ürün fikirleri bulmak.
- Envanter ve Stok Durumu Takibi: Rakiplerinin envanter değişimlerini gözlemleyerek kendi üretim ve stok planlamasını optimize etmek.
Web Scraping ile Çözüm
Ayşe Hanım, yukarıda öğrendiğimiz web scraping tekniklerini kullanarak bir Python betiği geliştirir. Bu betik, “kişiselleştirilmiş anahtarlık” anahtar kelimesiyle Etsy’de arama yapar ve sonuçları fiyata göre en düşükten en yükseğe sıralar. Betik, her bir anahtarlığın adını, fiyatını, ürün açıklamasını, görsel URL’sini ve satıcının adını çeker. Özellikle 0.065 dolar gibi çok düşük fiyatlı ürünleri hedefleme yeteneği, Ayşe Hanım’ın “giriş seviyesi” veya “promosyon” ürünlerindeki rekabeti anlamasına yardımcı olur.
Uygulanan Adımlar:
- URL Yapısı:
https://www.etsy.com/search?q=personalized+keychain&sort_by=price_ascgibi bir URL kullanır. - Veri Çekme:
requestsveBeautifulSoupkullanarak ilk birkaç sayfanın verilerini çeker. Daha dinamik içerik içinSelenium‘u devreye sokar. - Filtreleme: Çekilen veriler arasında, fiyatları temizleyip sayısal değerlere dönüştürdükten sonra, 0.065 dolara yakın veya bu fiyattan düşük olan ilk 10 ürünü belirler. Bu, Ayşe Hanım’a en ucuz anahtarlıkların hangi özelliklere sahip olduğunu ve nasıl fiyatlandırıldığını gösterir.
- Veri Analizi: Çekilen verileri bir CSV dosyasına kaydeder ve Excel veya basit Python analiz araçlarıyla inceler.
- Fiyat Aralıkları: Rakiplerinin anahtarlıklarını hangi fiyat aralıklarında sattığını görselleştirir. 0.065 dolarlık ürünlerin genellikle çok basit, tek renk veya küçük boyutlu promosyon ürünleri olduğunu fark eder.
- Malzeme ve Tasarım: En çok satan düşük fiyatlı ürünlerin genellikle pleksi, ahşap veya metal gibi malzemelerden yapıldığını, popüler temaların ise isim yazılı, hayvan figürlü veya minimal tasarımlar olduğunu gözlemler.
- Ortalama Fiyatlar: Kendi anahtarlıklarının ortalama fiyatını rakiplerinin ortalamasıyla karşılaştırır.
- Boşluklar: Örneğin, belirli bir hobiye (balıkçılık, kampçılık) yönelik kişiselleştirilmiş anahtarlıkların az olduğunu veya belirli bir renk paletinde ürün eksikliği olduğunu keşfeder.
Sonuçlar ve Faydalar
Bu vaka analizi sayesinde Ayşe Hanım şunları elde eder:
- Daha İyi Fiyatlandırma Stratejisi: Rakiplerinin fiyatlandırma stratejilerini net bir şekilde görerek, kendi ürünlerini daha rekabetçi bir şekilde fiyatlandırabilir veya daha yüksek fiyatlı, premium ürünler için değer teklifini güçlendirebilir. Özellikle 0.065 dolarlık ürünlerin pazarın en alt ucundaki boşluğu doldurduğunu ve genellikle “deneme ürünü” veya “ek hediye” olarak kullanılabileceğini anlar.
- Yeni Ürün Fikirleri: Pazardaki boşlukları ve popüler trendleri belirleyerek, yeni anahtarlık tasarımları veya kişiselleştirme seçenekleri geliştirebilir. Örneğin, belirli bir şehir temalı anahtarlıklar veya sürdürülebilir malzemelerden yapılmış ürünler gibi niş alanlara yönelebilir.
- Pazarlama Optimizasyonu: Rakiplerinin ürün açıklamalarında kullandığı anahtar kelimeleri ve vurguları inceleyerek kendi ürün açıklamalarını ve SEO’sunu iyileştirebilir.
- Zaman ve Maliyet Tasarrufu: Manuel olarak yüzlerce sayfayı incelemek yerine, otomatik bir betik sayesinde saatler sürecek bir işi dakikalar içinde tamamlar.
Ayşe Hanım’ın hikayesi, web scraping’in sadece büyük şirketler için değil, aynı zamanda küçük ve orta ölçekli işletmeler için de nasıl güçlü bir rekabet aracı olabileceğini göstermektedir. Doğru verilerle donanmış olmak, dijital pazar yerlerinde başarıya ulaşmanın anahtarlarından biridir.
Sonuç: Dijital Pazar Yerlerinde Veri Gücünü Kullanmak
Bu makale boyunca, Etsy gibi dinamik bir e-ticaret platformundan belirli kriterlere (fiyata göre sıralama ve spesifik bir fiyat noktası) göre veri çekmenin karmaşık ama bir o kadar da ödüllendirici sürecini adım adım inceledik. Python’ın requests ve BeautifulSoup kütüphanelerini kullanarak temel veri çekme yöntemlerinden, Selenium ile dinamik içerik yönetimine ve vekil sunucularla IP engellemelerini aşmaya kadar çeşitli tekniklere değindik. Ayrıca, çekilen verileri nasıl temizleyeceğimizi, sayısal değerlere dönüştüreceğimizi ve özellikle 0.065 dolar gibi çok düşük bir fiyat hedefiyle ilk 10 ürünü nasıl filtreleyeceğimizi detaylıca ele aldık.
Web scraping, dijital pazar yerlerinde gizli kalmış fırsatları ortaya çıkarmanın, rekabet avantajı elde etmenin ve daha bilinçli iş kararları almanın güçlü bir yoludur. İster küçük bir işletme sahibi olun, ister bir veri analisti veya sadece meraklı bir birey, bu teknikler sayesinde internetin sunduğu devasa veri havuzundan değer yaratabilirsiniz. Ayşe Hanım’ın vaka analizinde gördüğümüz gibi, doğru veri analizi, işletmelerin pazardaki konumlarını güçlendirmelerine ve yeni büyüme alanları keşfetmelerine olanak tanır.
Ancak, bu gücü kullanırken her zaman yasal ve etik sorumluluklarımızı unutmamalıyız. Web sitelerinin kullanım koşullarına, robots.txt dosyalarına saygı göstermek ve sunucularına aşırı yük bindirmemek, sorumlu bir web scraping uygulayıcısının temel ilkeleridir. Unutmayın ki, web scraping bir araçtır; önemli olan onu nasıl kullandığınız ve elde ettiğiniz verilerle ne kadar değer yarattığınızdır. Dijital dünyada veri, yeni altındır ve onu kazımasını bilenler, geleceğin fırsatlarına bir adım önde başlarlar.
Sıkça Sorulan Sorular
Web scraping yasal mıdır?
Web scraping’in yasallığı, çekilen verinin türüne, web sitesinin kullanım koşullarına ve ilgili ülkenin yasalarına (örneğin kişisel verilerin korunması yasaları) göre değişir. Genellikle halka açık verilerin çekilmesi, kişisel veri içermiyorsa ve web sitesinin kullanım koşulları ile robots.txt dosyası izin veriyorsa yasal kabul edilebilir. Ancak, kullanım koşullarını ihlal etmek veya telif hakkı korumalı içeriği izinsiz kullanmak yasa dışıdır. Her zaman ilgili web sitesinin politikalarını kontrol etmeniz ve hukuki tavsiye almanız önerilir.
Etsy beni engeller mi?
Evet, Etsy gibi büyük platformlar, sürekli ve hızlı istekler gönderen IP adreslerini veya bot benzeri davranışları tespit edip engelleyebilir. Bu engellemeler geçici (CAPTCHA ile çözülebilir) veya kalıcı olabilir. Engellenme riskini azaltmak için istekler arasına gecikmeler eklemeli (time.sleep()), User-Agent başlığını kullanmalı, vekil sunucular (proxies) kullanmayı düşünmeli ve insan benzeri davranışları simüle etmelisiniz.
Hangi programlama dilini kullanmalıyım?
Web scraping için en popüler ve önerilen dil Python’dır. Python’ın requests, BeautifulSoup, Selenium gibi zengin kütüphane ekosistemi, scraping işlemlerini oldukça kolaylaştırır. Node.js (Puppeteer, Cheerio), Ruby (Nokogiri) ve Go gibi diller de kullanılabilir, ancak Python genellikle en başlangıç dostu ve kapsamlı seçenek olarak kabul edilir.
Sadece 10 satır veri çekmek için bu kadar uğraşmaya değer mi?
Bu makaledeki örnek, belirli bir öğrenme ve uygulama senaryosu için 10 satır veri çekmeyi hedeflese de, web scraping’in gerçek değeri genellikle büyük veri kümelerini toplamaktır. Ancak, 10 satırlık veri bile, özellikle çok spesifik ve niş bir arama için (0.065 dolar gibi), pazar analizi veya rekabet takibi için kritik öneme sahip olabilir. Ayrıca, 10 satır çekmek için öğrendiğiniz teknikler, yüz binlerce satır veri çekmek için de kolayca ölçeklendirilebilir.
Çektiğim verileri nasıl kullanmalıyım?
Çektiğiniz verileri çeşitli şekillerde kullanabilirsiniz:
- Pazar Araştırması: Fiyatlandırma trendlerini, ürün özelliklerini ve müşteri tercihlerini analiz edin.
- Rekabet Analizi: Rakiplerinizin ürünlerini, fiyatlarını, envanterlerini ve stratejilerini izleyin.
- Fiyat Takibi: Belirli ürünlerin fiyat değişimlerini otomatik olarak takip edin.
- Ürün Geliştirme: Pazardaki boşlukları veya talep gören nişleri belirleyerek yeni ürün fikirleri geliştirin.
- Kişisel Kullanım: Kendi alışverişleriniz için en iyi fırsatları bulun veya belirli koleksiyonları takip edin.
Verileri CSV veya JSON formatında kaydederek Excel, Google Sheets, Pandas (Python kütüphanesi) veya bir veritabanı gibi araçlarla daha detaylı analiz edebilirsiniz.
#WebScraping #Python #Etsy #VeriAnalizi #E-ticaret
