eBay, kayıtlı kullanıcıları arasında geniş bir ürün yelpazesinde ticaret fırsatları sunan tanınmış bir çevrimiçi platformdur. Bu kılavuzda, Python kullanarak eBay listelerinden nasıl veri kazıyacağımızı açıklayacağız. Bu nedenle, listelemenin kendisinden ve daha ince ayrıntılar için sırayla her bir ürüne giderek elde edilebilecek ayrıntılarla ilgileneceğiz.
Başlamak için aşağıdaki Python kütüphanelerinin kurulu olduğundan emin olun:
Bu kütüphaneleri kullanarak yükleyin:
pip install requests lxml pandas
eBay'de ürün ararken, her sayfa URL'si sayfalandırılmış sonuçlar arasında gezinmek için değiştirilebilir. Örneğin:
_pgn parametresi, birden fazla liste sayfası arasında gezinmek için kullanılır ve kapsamlı verilerin alınmasını sağlar. Kazıma işlemine başlayalım.
Başlamak için, eBay'in anti-bot önlemleri tarafından tespit edilmeyi ve potansiyel engellemeyi önlemeye yardımcı olan gerçek bir tarayıcı isteğini taklit etmek için başlıklar ayarlayacağız. Ardından, her ürün için bağlantıları toplamak üzere listeleme sayfasına bir istek göndereceğiz.
import requests
from lxml.html import fromstring
# Gerçek bir tarayıcıyı simüle etmek için başlıkları tanımlayın
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-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
# Arama sorgusu için istek parametreleri
params = {
'_nkw': 'laptop',
}
# eBay listeleme sayfasına bir istek gönderin
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Listeleme sayfasında, tek tek ürünlerin URL'lerini çıkaracağız. Bu, ürün başlığı, fiyatı ve daha fazlası gibi belirli ayrıntıları toplamak için her ürün sayfasını ziyaret etmemizi sağlar.
# Ürün bağlantılarını ayıklamak için listeleme sayfasını ayrıştırın
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Bulunan bağlantılardan bir örnek çıktı
print("Product Links:", links[:5]) # Display the first five product links
Ürün URL'leri elimizdeyken, her bir ürün sayfasını ziyaret edeceğiz ve aşağıdaki ayrıntıları çıkaracağız:
Ardından, her bağlantıda döngü oluşturacağız ve ürün sayfasında gerekli bilgileri bulmak için XPath ifadelerini kullanacağız.
product_data = []
for url in links:
# Ürün sayfasına bir istek gönderin
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# XPath kullanarak veri ayıklama
try:
product_title = product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0]
price = product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0]
shipping_cost = product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
product_condition = product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0]
available_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0]
sold_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1]
payment_options = ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label'))
return_policy = product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
# Verileri bir sözlükte saklama
product_info = {
'Title': product_title,
'Price': price,
'Shipping Cost': shipping_cost,
'Condition': product_condition,
'Available Quantity': available_quantity,
'Sold Quantity': sold_quantity,
'Payment Options': payment_options,
'Return Policy': return_policy,
}
product_data.append(product_info)
except IndexError as e:
print(f"An error occurred: {e}")
Verileri topladıktan sonra Pandas kullanarak bir CSV dosyasına kaydedebiliriz.
import pandas as pd
# Verileri DataFrame'e dönüştürme
df = pd.DataFrame(product_data)
# CSV'ye Kaydet
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay aşırı talepleri önlemek için hız sınırlaması kullanır. İşte tespit edilmekten kaçınmak için birkaç yöntem:
Bu en iyi uygulamaları izleyerek engellenme riskini en aza indirebilir ve verileri verimli bir şekilde kazımaya devam edebilirsiniz.
İşte eBay verilerini kazımak ve bir CSV dosyasına kaydetmek için tam kod:
import requests
import random
from lxml.html import fromstring
import pandas as pd
useragents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36']
# İstek için başlıkları tanımlama
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-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': random.choice(useragents),
}
# Arama sorgusu parametreleri
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Listeleme sayfasını getir
listing_page_response = requests.get('https://www.ebay.com/sch/i.html', params=params, headers=headers, proxies=proxies)
listing_parser = fromstring(listing_page_response.text)
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Ürün verilerini ayıklayın
product_data = []
for url in links:
product_page_response = requests.get(url, headers=headers, proxies=proxies)
product_parser = fromstring(product_page_response.text)
try:
product_info = {
'Title': product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0],
'Price': product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0],
'Shipping Cost': product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0],
'Condition': product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0],
'Available Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0],
'Sold Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1],
'Payment Options': ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label')),
'Return Policy': product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
}
product_data.append(product_info)
except IndexError:
continue
# CSV'ye Kaydet
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Python ile eBay'i kazımak, ürünler, fiyatlandırma ve trendler hakkında verimli veri toplamaya olanak tanır. Bu kılavuzda, listeleri kazıma, sayfalandırmayı işleme, başlıkları ayarlama ve tespit edilmekten kaçınmak için proxy kullanma konularını ele aldık. Sorumlu istek aralıkları ve proxy rotasyonu kullanarak eBay'in hizmet koşullarına saygı göstermeyi unutmayın. Bu araçlarla artık pazar bilgileri için eBay verilerini kolayca toplayabilir ve analiz edebilirsiniz. Mutlu kazımalar!
Yorumlar: 0