Python Ürünleri karşılaştırma sistemi nasıl yapılır?

DevTools Network kısmını iyi kullanmak ve web işlerinden de anlamak lazım.
Trendyolda herhangi bir ürüne tıkladım ve alttaki endpoint'e ulaştım.

Şuana kadar basit şey. Fakat URL de yazan 527.. ile başlayan id product-group-id değeri. Peki bunu nasıl bulurum diye baktım. Hiçbir network isteğinde bu değeri bulamadım. Anladım ki bu değer SSR (Server Side Rendering) ile gelmiş. html inspectten element attribute değerlere biraz göz gezdirdim fakat gözüme çarpan bir id bulamadım. O zaman diğer yöntem olarak JavaScript değişkenlerine bakmam lazımdı. Console'a window.product yazdığımda __PRODUCT_DETAIL_APP_INITIAL_STATE__ değişkenini buldum. Tadaa. İşte productGroupId değeri burada.
Biraz değişkeni inceledim ve endpointe bile gerek kalmadı :d Tüm istediğin veriler alttaki değişkende;
variant adlı değişkende de beden, renk gibi zımbırtılar var.
Kod:
window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product

Artık product sayfasını render eder ve alttaki değeri alırsın.

Edit: Renk verileri yok galiba. variant sadece o ürüne ait beden bilgisini veriyormuş. Biraz detaylı bakmak lazım fakat renk yoksa üstteki endpointe groupId gönderilirse tüm renk ve beden fiyatları gelmesi lazım.
Hocam scraping bilginizi nerede gelistirdiniz?
 
Hocam scraping bilginizi nerede gelistirdiniz?
Mesajımın ilk kısmında "Web işlerinden anlamak" ile başlayan bir cümlem var.
Benzer sistemlerde çalışınca az çok nasıl işlediğini çözüyorsun. Bizimde geliştirdiğimiz sistem benzer mimarilere sahip. Window değişkeninde saklı. Birden fazla micro yapı olunca mecbur globalde tutuyorsun değişkenleri. Ayrıca güvenliğe önem vermeyen çoğu kişi bu gibi id değerleri kolay almak için html attribute olarak tanımlarlar.
 
Mesajımın ilk kısmında "Web işlerinden anlamak" ile başlayan bir cümlem var.
Benzer sistemlerde çalışınca az çok nasıl işlediğini çözüyorsun. Bizimde geliştirdiğimiz sistem benzer mimarilere sahip. Window değişkeninde saklı. Birden fazla micro yapı olunca mecbur globalde tutuyorsun değişkenleri. Ayrıca güvenliğe önem vermeyen çoğu kişi bu gibi id değerleri kolay almak için html attribute olarak tanımlarlar.
Bende web scraping üzerine kendim birkaç proje geliştirmiştim ancak sizin kadar hakim değilim meseleye. Birazcık bu alanda bilgimi arttırmak istiyorum. Verebileceğiniz bir tavsiye var mı?
 
Çok teşekkür ediyorum size hocam sizleri bulmak çok zor iyi ki varsınız
Şimdi sizde beni mazur görün bunu otomatikleştirmek istiyorum ne yapmalıyım birazcık anladım ve.
Dediklerinizi araştırdım araştırıyorum da ama tam olarak inanın cehaletimdendir anlamadım verileri çekebilir miyiz şu anda
Tekrardan minnettarım size 🙏
@RaSGooL
 
Bende web scraping üzerine kendim birkaç proje geliştirmiştim ancak sizin kadar hakim değilim meseleye. Birazcık bu alanda bilgimi arttırmak istiyorum. Verebileceğiniz bir tavsiye var mı?
Teşekkür ederim öncelikle. Açıkçası pek bir tavsiyem yok. Web sistemlerin nasıl çalıştığını çözdüğünde olayı kapıyorsun. Bende sürekli farklı sistemlerde etkin olduğum için az çok sistemlerin nasıl işlediğini biliyorum.


Çok teşekkür ediyorum size hocam sizleri bulmak çok zor iyi ki varsınız
Şimdi sizde beni mazur görün bunu otomatikleştirmek istiyorum ne yapmalıyım birazcık anladım ve.
Dediklerinizi araştırdım araştırıyorum da ama tam olarak inanın cehaletimdendir anlamadım verileri çekebilir miyiz şu anda
Tekrardan minnettarım size 🙏
@RaSGooL
ChatGPT bunun için güzel bir kaynak.
Sırasıyla nasıl yapacağını adım adım anlatayım.
ChatGPT de alttaki basit prompt ile şu kodu al;
Prompt: "Python ve Selenium kullanarak javascript değişkenini nasıl alırım?"
Kod:

Python:
from selenium import webdriver

# Selenium WebDriver'ı başlat
driver = webdriver.Chrome()  # veya başka bir tarayıcı

# Web sayfasını yükleyin
driver.get("https://www.example.com")

# JavaScript ile sayfadaki değişkeni almak için execute_script kullanın
test_variable = driver.execute_script("return window.TEST_VARIABLE")

# Değişkenin değerini yazdırın
print("TEST_VARIABLE:", test_variable)

# WebDriver'ı kapatın
driver.quit()

Kodu az çok anlıyorsun zaten. Dil önemsiz. Farklı bir programlama dilide olsa az çok anlaman lazım. Bu sebeple alttaki kodu rahatlıkla yazabilmen lazım.

Python:
from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

print("Product: " + product)
driver.quit()

Product değişkenini aldın. Şimdi diğer alternatif ürünlerin fiyatlarını almak için ilk mesajımda verdiğim endpointe istek atalım. Yine ChatGPT'ye;
Prompt: "Python ile nasıl http GET isteği atabilirim?"
Verdiği Kod;
Python:
import requests

# İstek atılacak URL
url = 'https://example.com'

# GET isteği gönderme
response = requests.get(url)

# Yanıtı kontrol etme
if response.status_code == 200:
    # İstek başarılı oldu, içeriği yazdırma
    print(response.text)
else:
    # İstek başarısız oldu, hata kodunu yazdırma
    print("İstek başarısız oldu, hata kodu:", response.status_code)

Her şey tamam. Artık kodları birleştirelim;

Python:
from selenium import webdriver
import requests

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

productGroupId = product["productGroupId"]

getProductGroupRes = requests.get(f"https://public.trendyol.com/discovery-web-websfxproductgroups-santral/api/v1/product-groups/{productGroupId}?channelId=1")

if getProductGroupRes.status_code == 200:
    productGroup = getProductGroupRes.json()
    if productGroup["isSuccess"]:
        print("PRODUCT GROUP: ", productGroup["result"])
else:
    print("Error while fetching product group. Status code: ", getProductGroupRes.status_code)

driver.quit()

Bundan sonrası artık değişkenleri alıp istediğin şeyi yapmak. Karşılaştırma sistemi yapmak için belki şu şekilde de çalıştırmak mantıklı olabilir;
python trendyol-compare.py 12345 67890

12345 ve 67890 product id değerleri olur.
Scriptdeki linki de şu şekilde yaparsın;
Kod:
https://www.trendyol.com/x/x-p-694812014
 
Teşekkür ederim öncelikle. Açıkçası pek bir tavsiyem yok. Web sistemlerin nasıl çalıştığını çözdüğünde olayı kapıyorsun. Bende sürekli farklı sistemlerde etkin olduğum için az çok sistemlerin nasıl işlediğini biliyorum.



ChatGPT bunun için güzel bir kaynak.
Sırasıyla nasıl yapacağını adım adım anlatayım.
ChatGPT de alttaki basit prompt ile şu kodu al;
Prompt: "Python ve Selenium kullanarak javascript değişkenini nasıl alırım?"
Kod:

Python:
from selenium import webdriver

# Selenium WebDriver'ı başlat
driver = webdriver.Chrome()  # veya başka bir tarayıcı

# Web sayfasını yükleyin
driver.get("https://www.example.com")

# JavaScript ile sayfadaki değişkeni almak için execute_script kullanın
test_variable = driver.execute_script("return window.TEST_VARIABLE")

# Değişkenin değerini yazdırın
print("TEST_VARIABLE:", test_variable)

# WebDriver'ı kapatın
driver.quit()

Kodu az çok anlıyorsun zaten. Dil önemsiz. Farklı bir programlama dilide olsa az çok anlaman lazım. Bu sebeple alttaki kodu rahatlıkla yazabilmen lazım.

Python:
from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

print("Product: " + product)
driver.quit()

Product değişkenini aldın. Şimdi diğer alternatif ürünlerin fiyatlarını almak için ilk mesajımda verdiğim endpointe istek atalım. Yine ChatGPT'ye;
Prompt: "Python ile nasıl http GET isteği atabilirim?"
Verdiği Kod;
Python:
import requests

# İstek atılacak URL
url = 'https://example.com'

# GET isteği gönderme
response = requests.get(url)

# Yanıtı kontrol etme
if response.status_code == 200:
    # İstek başarılı oldu, içeriği yazdırma
    print(response.text)
else:
    # İstek başarısız oldu, hata kodunu yazdırma
    print("İstek başarısız oldu, hata kodu:", response.status_code)

Her şey tamam. Artık kodları birleştirelim;

Python:
from selenium import webdriver
import requests

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

productGroupId = product["productGroupId"]

getProductGroupRes = requests.get(f"https://public.trendyol.com/discovery-web-websfxproductgroups-santral/api/v1/product-groups/{productGroupId}?channelId=1")

if getProductGroupRes.status_code == 200:
    productGroup = getProductGroupRes.json()
    if productGroup["isSuccess"]:
        print("PRODUCT GROUP: ", productGroup["result"])
else:
    print("Error while fetching product group. Status code: ", getProductGroupRes.status_code)

driver.quit()

Bundan sonrası artık değişkenleri alıp istediğin şeyi yapmak. Karşılaştırma sistemi yapmak için belki şu şekilde de çalıştırmak mantıklı olabilir;
python trendyol-compare.py 12345 67890

12345 ve 67890 product id değerleri olur.
Scriptdeki linki de şu şekilde yaparsın;
Kod:
https://www.trendyol.com/x/x-p-694812014
Çok teşekkürler hocam elinize sağlık minnettarım 🙏

Teşekkür ederim öncelikle. Açıkçası pek bir tavsiyem yok. Web sistemlerin nasıl çalıştığını çözdüğünde olayı kapıyorsun. Bende sürekli farklı sistemlerde etkin olduğum için az çok sistemlerin nasıl işlediğini biliyorum.

ChatGPT bunun için güzel bir kaynak.
Sırasıyla nasıl yapacağını adım adım anlatayım.
ChatGPT de alttaki basit prompt ile şu kodu al;
Prompt: "Python ve Selenium kullanarak JavaScript değişkenini nasıl alırım?"
Kod:

Python:
from selenium import webdriver.

# Selenium WebDriver'ı başlat.
driver = webdriver.Chrome() # veya başka bir tarayıcı.

# Web sayfasını yükleyin.
driver.get("https://www.example.com")

# JavaScript ile sayfadaki değişkeni almak için execute_script kullanın.
test_variable = driver.execute_script("return window.TEST_VARIABLE")

# Değişkenin değerini yazdırın.
print("TEST_VARIABLE:", test_variable)

# WebDriver'ı kapatın.
driver.quit()

Kodu az çok anlıyorsun zaten. Dil önemsiz. Farklı bir programlama dilide olsa az çok anlaman lazım. Bu sebeple alttaki kodu rahatlıkla yazabilmen lazım.

Python:
from selenium import webdriver.

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

print("Product: " + product)
driver.quit()

Product değişkenini aldın. Şimdi diğer alternatif ürünlerin fiyatlarını almak için ilk mesajımda verdiğim endpointe istek atalım. Yine ChatGPT'ye;
Prompt: "Python ile nasıl HTTP get isteği atabilirim?"
Verdiği kod;
Python:
import requests.

# İstek atılacak URL.
url = 'https://example.com'

# GET isteği gönderme.
response = requests.get(url)

# Yanıtı kontrol etme.
if response.status_code == 200:
 # İstek başarılı oldu, içeriği yazdırma.
 print(response.text)
else:
 # İstek başarısız oldu, hata kodunu yazdırma.
 print("İstek başarısız oldu, hata kodu:", response.status_code)

Her şey tamam. Artık kodları birleştirelim;

Python:
from selenium import webdriver.
import requests.

driver = webdriver.Chrome()

driver.get("https://www.trendyol.com/modagen/unisex-lacivert-the-power-of-baskili-oversize-t-shirt-p-694812014?boutiqueId=61&merchantId=335515&sav=true")

product = driver.execute_script("return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__.product")

productGroupId = product["productGroupId"]

getProductGroupRes = requests.get(f"https://public.trendyol.com/discovery-web-websfxproductgroups-santral/api/v1/product-groups/{productGroupId}?channelId=1")

if getProductGroupRes.status_code == 200:
 productGroup = getProductGroupRes.json()
 if productGroup["isSuccess"]:
 print("PRODUCT GROUP: ", productGroup["result"])
else:
 print("Error while fetching product group. Status code: ", getProductGroupRes.status_code)

driver.quit()

Bundan sonrası artık değişkenleri alıp istediğin şeyi yapmak. Karşılaştırma sistemi yapmak için belki şu şekilde de çalıştırmak mantıklı olabilir;
Python trendyol-compare.py 12345 67890.

12345 ve 67890 product ID değerleri olur.
Scriptdeki linki de şu şekilde yaparsın;
Kod:
https://www.trendyol.com/x/x-p-694812014

Hocam beden varyasyonlarının olduğu varyant vardır eminim ben bulamadım her rengin bedeninin farklı fiyatları oluyor bana tam olarak bu lazım ne kadar arasamda bulamadım bir sürü video izledim yabancılarda dahil ama yok
X marka tişört
Siyah
S 100TL
M 125TL.
L 125TL
XL 100TL
Beyaz
S 140TL
M 100TL
L 100TL
XL125TL

Bu giyim için tabii ki örneğin elektronikde iPhone olsun onunda GB varyasyonları var.
iPhone 11
Beyaz
128 GB 25.000TL
256 GB 25.750TL
512 GB 25.200TL
Siyah.
128 GB 25.300TL
256 GB 25.750TL
512 GB 25.200TL

Genel manada nasıl yapabiliriz giyim sadece bir örnek tüm kategorilerin varyasyonları kapsayan bir kod olsa tamam geriye kalanları tamamlayabilirim şimdiden çok teşekkür ederim ilginize ve bilgilendirmenize minnettarım.

@RaSGooL
 
Son düzenleme:

Geri
Yukarı