Python ile LC Waikiki indirim dedektörü nasıl yapılır?

mrcbrbn

Hectopat
Katılım
11 Eylül 2020
Mesajlar
159
Çözümler
1
GitHub'da Zara indirim dedektörü diye bir Python projesi buldum, bu proje Tolga Bıyık tarafından yapıldı ben bu projeyi değiştirmek istediğim için ve kendisinin yoğun bir zamanı olduğu zorlanıyorum, bildiğiniz üzere Zara boykot ürünü ve birçok kişi bu yüzden LC Waikiki ve DeFacto üzerinden alışveriş yapmaya yöneliyor ben de bunun için bu projeyi LC Waikiki ve DeFacto'ya özel olarak yapmak istiyorum, bana yardımcı olabilir misiniz?
 
GitHub'da Zara indirim dedektörü diye bir Python projesi buldum, bu proje Tolga Bıyık tarafından yapıldı ben bu projeyi değiştirmek istediğim için ve kendisinin yoğun bir zamanı olduğu zorlanıyorum, bildiğiniz üzere Zara boykot ürünü ve birçok kişi bu yüzden LC Waikiki ve DeFacto üzerinden alışveriş yapmaya yöneliyor ben de bunun için bu projeyi LC Waikiki ve DeFacto'ya özel olarak yapmak istiyorum, bana yardımcı olabilir misiniz?
Web Scraping araştırabilirsin. Bununla ilgili BS4 kullanılıyor en çok belki Pandas’da gerekebilir biraz.

İşi bilen adam Selenium kullanmaz. Selenium kaynak yönetimi açısından berbat. Waikiki’de yüzlerce ürün var hepsini anlık güncellemek istediğinde Selenium mutlu etmeyecektir. Eğer projeni CLİ değil de GUI destekli yapmak istiyorsan o zaman Tkinter tarzı bi kütüphane ile arayüz de yapabilirsin. Bence Arayüz gereksiz eğer amacın sadece data toplamaksa. Ben olsam dataları ayrı toplayan bi App yazardım. Sonra kullanıcılara bir API ile İndirim botunu sunardım.

Bu işle ilgili uzman birisini de etiketliyim.

Selenium bazen gerekli olabiliyor çünkü bir event listenera bağlı JS ile ilgili işlemleri taklit etmen gerekebiliyor. Burda Selenium tek çözüm oluyor maalesef.

@RaSGooL
 
Son düzenleme:
Orijinal projede bir uygulama açıyor ve koddaki zara linkindeki ürünlerin kaç adeti çekileceğini seçtiğimiz ve ürünleri Excel dosyası olarak kaydettiğimiz ve bu kayıt edilen ürünleri bir sonraki fiyat değerlendirmesi için karşılaştırmamıza yarayan arayüz var o yüzden Selenium varmış.
 
Aslında attığın github reposu çoğu işi hallediyor. Senin tek yapman gereken URL tarafını değiştirmek ve query selector taraflarını tekrar yazman gerek. Temel mantık kısmı oturmuş projede.

Ben bu tür işlemlerde öncelikle Dev tool açar ve network kısmından requestleri incelerim. Herhangi bir kısıtlama veya güvenlik önlemi almamışsa bal gibi apaçık durur orada. Aynen öyle yapmış lcw ve defacto ekibi de. Al sana link. İstediğin kadar veri geliyor. Kafana göre takılırsın.

Category kısmını menüden rahatça alabilirsin. Her page de 250 adet getiriyor. PageIndex artırıp kullanırsın. PageSize yemedi. Başka bir ismi vardır. Biraz kurcalasan bulursun.

Aslında selenium vs gerek kalmadı. API istek atıyorsun, dönen response içerisinde büyük ihtimalle discount değeri vardır (Bakmadım ama %90 vardır, yoksa UI tarafına vahiyle gelmiyor bu). Bu kadar aslında. Category kısmını dilediğin değeri kullanabilirsin.

Defacto için;
 
Aslında attığın GitHub reposu çoğu işi hallediyor. Senin tek yapman gereken URL tarafını değiştirmek ve query selector taraflarını tekrar yazman gerek. Temel mantık kısmı oturmuş projede.

Ben bu tür işlemlerde öncelikle dev tool açar ve network kısmından requestleri incelerim. Herhangi bir kısıtlama veya güvenlik önlemi almamışsa bal gibi apaçık durur orada. Aynen öyle yapmış LCW ve DeFacto ekibi de. Al sana link. İstediğin kadar veri geliyor. Kafana göre takılırsın.

Category kısmını menüden rahatça alabilirsin. Her page de 250 adet getiriyor. Pageındex artırıp kullanırsın. Pagesize yemedi. Başka bir ismi vardır. Biraz kurcalasan bulursun.

Aslında Selenium vs gerek kalmadı. API istek atıyorsun, dönen response içerisinde büyük ihtimalle discount değeri vardır (bakmadım ama %90 vardır, yoksa UI tarafına vahiyle gelmiyor bu). Bu kadar aslında. Category kısmını dilediğin değeri kullanabilirsin.

DeFacto için;

Teşekkür ederim ancak ben bu kodu kurstaki PC'de denemiştim ancak normalde sadece telefondan deneyebiliyorum evde PC yok nasıl yapabilirim?
 
Teşekkür ederim ancak ben bu kodu kurstaki PC'de denemiştim ancak normalde sadece telefondan deneyebiliyorum evde PC yok nasıl yapabilirim?
Farketmez. Python yorumlayıcı indir telefonuna. Yada online yazıp çalıştırabileceğin bir site bul.
ChatGPT basit bir prompt girsen sana python kodunu verecek. Dayanayıp kendim denedim;

Python:
import json
import requests

# İndirimli ürünleri filtreleyen fonksiyon
def filter_discounted_products(api_data):
    discounted_products = []

    if "Data" in api_data and "SearchResponse" in api_data["Data"]:
        for product in api_data["Data"]["SearchResponse"]["Documents"]:
            campaign = product.get("CampaignBadge")
            if campaign and "DiscountAmount" in campaign:
                discounted_products.append({
                    "name": product.get("ProductName", "Unknown"),
                    "image": product.get("ProductPictures", [{}])[0].get("ProductPicturePath", "No Image"),
                    "discount": campaign["DiscountAmount"],
                    "normalPrice": product.get("ProductPriceInclTax", 0)
                })

    return discounted_products

# JSON verisini test için dış bir dosya yerine lokalden al
# Eğer çevrimdışı bir ortamdaysanız bu kısmı aktif edin
# with open('local_data.json', 'r') as file:
#     api_response = json.load(file)
#     filtered_products = filter_discounted_products(api_response)
#     print(json.dumps(filtered_products, indent=4))

# Verilen URL'den JSON verisini al ve işle
url = "https://www.defacto.com.tr/Catalog/PartialIndexScrollResult?page=1&SortOrder=0&pageSize=24&fx_c1=1&fx_c2=1413"
try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # Hata varsa burada tetiklenir
    api_response = response.json()
    filtered_products = filter_discounted_products(api_response)
    print(json.dumps(filtered_products, indent=4))
except requests.exceptions.RequestException as e:
    print(f"Error: Unable to fetch data. Details: {e}")
except json.JSONDecodeError as e:
    print(f"Error: Failed to parse JSON. Details: {e}")

Basit bir liste dönüyor.
 
Fark etmez. Python yorumlayıcı indir telefonuna. Ya da Online yazıp çalıştırabileceğin bir site bul.
ChatGPT basit bir prompt girsen sana Python kodunu verecek. Dayanayıp kendim denedim;

Python:
import json.
import requests.

# İndirimli ürünleri filtreleyen fonksiyon.
def filter_discounted_products(api_data):
 discounted_products = []

 if "Data" in api_data and "SearchResponse" in api_data["Data"]:
 for product in api_data["Data"]["SearchResponse"]["Documents"]:
 campaign = product.get("CampaignBadge")
 if campaign and "DiscountAmount" in campaign:
 discounted_products.append({
 "name": product.get("ProductName", "Unknown"),
 "image": product.get("ProductPictures", [{}])[0].get("ProductPicturePath", "No Image"),
 "discount": campaign["DiscountAmount"],
 "normalPrice": product.get("ProductPriceInclTax", 0)
 })

 return discounted_products.

# JSON verisini test için dış bir dosya yerine lokalden al.
# Eğer çevrimdışı bir ortamdaysanız bu kısmı aktif edin.
# with open('local_data.json', 'r') as file:
# api_response = json.load(file)
# filtered_products = filter_discounted_products(api_response)
# print(json.dumps(filtered_products, indent=4))

# Verilen URL'den JSON verisini al ve işle.
url = "https://www.defacto.com.tr/Catalog/PartialIndexScrollResult?page=1&SortOrder=0&pageSize=24&fx_c1=1&fx_c2=1413"
try:
 response = requests.get(url, timeout=10)
 response.raise_for_status() # Hata varsa burada tetiklenir.
 api_response = response.json()
 filtered_products = filter_discounted_products(api_response)
 print(json.dumps(filtered_products, indent=4))
except requests.exceptions.RequestException as e:
 print(f"Error: Unable to fetch data. Details: {e}")
except json.JSONDecodeError as e:
 print(f"Error: Failed to parse JSON. Details: {e}")

Basit bir liste dönüyor.

Bu kodu flask tabanlı yaptım bu kodda mesela DeFacto da tüm kategoriler arasında seçim yaptığımız, ürünleri filtreleme ve sıralama özelliklerini nasıl ekleriz.
 
Bu kodu flask tabanlı yaptım bu kodda mesela DeFacto da tüm kategoriler arasında seçim yaptığımız, ürünleri filtreleme ve sıralama özelliklerini nasıl ekleriz.
Kategorileri alacağın servis vardır. Attığım linkte kategori id alanı var. Kategori listesinden id yi bu listeye koyduğunda oradaki ürünler gelir.
 

Technopat Haberler

Yeni konular

Geri
Yukarı