Ürün ayrıntıları için e-ticaret veri kazıma, rekabet analizi, fiyat izleme ve pazar araştırması yapmak için kullanışlıdır. Ürün sayfalarından veri kazıma Python kullanılarak rahatlıkla yapılabilir. Bu e-ticaret kazıma eğitimi, çevrimiçi mağazalardan istek ve lxml kombinasyonunu kullanarak nasıl bilgi toplayacağınızı gösterecektir.
E-ticaret için web sayfalarının kazınması, internetteki mağazalardan başlık, fiyat veya tanımlayıcı numarası gibi ürün bilgilerinin alınmasını içerir. Python'da bulunan çok sayıda kütüphane bunu sadece kolay değil aynı zamanda oldukça verimli hale getirir. Bu makalede, Python kullanarak e-ticaret web sitelerini kazımaya odaklanacağız. Costco'nun web sitesi bizim nesnemiz olacak.
Öncelikle, bu betik için ihtiyaç duyacağımız tüm mevcut Python e-ticaret kazıma araçlarına veya kütüphanelerine sahip olduğumuzdan emin olalım:
pip install requests
pip install lxml
Web sitesindeki belirli sayfalardan ürün adlarını, özelliklerini ve markalarını çıkarmaya odaklanacağız.
Bir e-ticaret ürün kazıyıcı oluşturmaya başlamak için öncelikle belirli bir web sayfasının nasıl yapılandırıldığını anlamanız gerekir. Web sitesine gidin ve bilgi toplamak istediğiniz sayfayı açın ve gerekli öğeleri (ör. ürünün adı, özellikleri, markası vb.) inceleyin.
İlk olarak, özellikle ürün sayfaları için GET göndermek üzere requests kütüphanesini içe aktaracağız. Ayrıca, istek başlıklarını bir tarayıcı isteğine benzeyecek şekilde yapılandıracağız.
import requests
# Kazınacak ürün URL'lerinin listesi
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
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',
}
# Her URL'de döngü oluşturun ve bir GET isteği gönderin
for url in urls:
response = requests.get(url, headers=headers)
if response.status_code == 200:
html_content = response.text
# Diğer işlemler sonraki adımlarda eklenecektir
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Lxml ile html'den istenen bilgileri çıkaracağız. E-ticaret veri kazıma ile uğraşırken çok önemlidir.
from lxml import html
# Kazınmış verileri depolamak için liste
scraped_data = []
# Her URL'de döngü oluşturun ve bir GET isteği gönderin
for url in urls:
response = requests.get(url)
if response.status_code == 200:
html_content = response.content
# HTML içeriğini lxml ile ayrıştırma
tree = html.fromstring(html_content)
# XPath kullanarak veri ayıklama
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Çıkarılan verileri listeye ekleme
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Kazınan verileri yazdırma
for item in scraped_data:
print(item)
Python ile bir e-ticaret web sitesini kazımaya çalıştığımızda, çoğu web sitesinin bir çeşit anti-bot yazılımına sahip olduğunu anlamamız gerekir. Proxy kullanmak ve kullanıcı aracılarını döndürmek şüphelerini hafifletmeye yardımcı olabilir.
IP yetkilendirmesi ile proxy kullanma:
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Dönen Kullanıcı Temsilcileri:
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Gerektiğinde daha fazla kullanıcı aracısı ekleyin
]
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url, headers=headers)
Sonunda, çıkarılan veriler bir CSV formatında saklanacak, böylece daha sonra daha gelişmiş bir e-ticaret veri kazıma işlemi için analiz edebileceğim.
import csv
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# CSV dosyasına veri yazma
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
print(f"Error occurred while writing data to {csv_file}")
İşte etkili e-ticaret veri kazıma için komut dosyasının son sürümü. Kolay kullanım için kopyalayıp yapıştırabilirsiniz.
import requests
import urllib3
from lxml import html
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Kazınacak ürün URL'lerinin listesi
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
# headers
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',
}
# Dönen istekler için kullanıcı aracılarının listesi
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Gerektiğinde daha fazla kullanıcı aracısı ekleyin
]
# Dönen talepler için vekillerin listesi
proxies = [
{'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
# Gerektiğinde daha fazla proxy ekleyin
]
# Kazınmış verileri depolamak için liste
scraped_data = []
# Her URL'de döngü oluşturun ve bir GET isteği gönderin
for url in urls:
# İstek üstbilgileri için rastgele bir kullanıcı aracısı seçin
headers['user-agent'] = random.choice(user_agents)
# İstek için rastgele bir proxy seçin
proxy = random.choice(proxies)
# URL'ye üstbilgiler ve proxy ile HTTP GET isteği gönderme
response = requests.get(url, headers=headers, proxies=proxy, verify=False)
if response.status_code == 200:
# Yanıttaki HTML içeriğini depolayın
html_content = response.content
# HTML içeriğini lxml ile ayrıştırma
tree = html.fromstring(html_content)
# XPath kullanarak veri ayıklama
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Çıkarılan verileri listeye ekleme
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
# İstek başarısız olursa hata mesajı yazdır
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# CSV dosya kurulumu
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# CSV dosyasına veri yazma
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
# Dosyaya yazma başarısız olursa hata mesajı yazdır
print(f"Error occurred while writing data to {csv_file}")
Python e-ticaret kazıyıcı şimdi tamamlandı.
Costco'nun çevrimiçi mağazası için bir e-ticaret web kazıyıcısının kullanımı, Python'un analiz ve optimum iş kararı verme için ürün verilerini elde etmede ne kadar etkili olabileceğini göstermektedir. Otomatik çıkarıcılar sağlamak için doğru komut dosyaları ve kütüphaneler Requests ve Lxml ile, bir anti-bot API'sinin neden olduğu herhangi bir iş akışı kesintisi olmadan siteyi kazımak mümkündür. Son olarak, e-ticaret web kazıma işlemini gerçekleştirirken her zaman etik düzenlemelere uymak önemlidir.
Yorumlar: 0