• 28-01-2023, 23:26:20
    #1
    Merhaba arkadaşlar.
    Python da request kütüphanesi ile bir siteden jpg linki almak istiyorum.Başka sayfalarda alıp bunu resim olarak telegram botuma atıyorum.Ama başka bir sitede resmin jpg linkini request ile alamadım.
    normal tarayıcıda a etiketinin hrefinde jpg dosyasının linkini veriyor. Ama ben requests ile çektiğimde href de javascript yazıyor linki vermiyor Yardımcı olursanız çok sevinirim.Teşekkürler.

    Normal tarayıcı:

    <a href="https://cdn03.ciceksepeti.com/cicek/kcm51543257-1/XL/t500-akilli-saat-smart-watch-turkce-menulu-arama-cevaplama-cift-tus-aktif-kcm51543257-1-4b27238aea6d48079a5d43ed0c6735f8.jpg">

    <img class="product__image" src="https://cdn03.ciceksepeti.com/cicek/kcm51543257-1/L/t500-akilli-saat-smart-watch-turkce-menulu-arama-cevaplama-cift-tus-aktif-kcm51543257-1-4b27238aea6d48079a5d43ed0c6735f8.jpg" width="582" height="640" alt="T500 Akıllı Saat Smart Watch Türkçe Menülü Arama Cevaplama Çift Tuş Aktif">
    </a>

    requests ile bana gelen:

    <a href="javascript:;">
    <img alt="T500 Akıllı Saat Smart Watch Türkçe Menülü Arama Cevaplama Çift Tuş Aktif" class="product__image" height="640" src="//cdn03.ciceksepeti.com/Themes/Ciceksepeti/Assets/images/brokenimage.jpg" width="582"/>
    </a>
    </div>
  • 28-01-2023, 23:28:25
    #2
    BeautifulSoup ile alabilirsiniz sanırım
  • 28-01-2023, 23:29:13
    #3
    Python Coder
    Headers kullanılıyor mu requests'de
  • 28-01-2023, 23:30:43
    #4
    evet hocam headers kullanıyorum.
  • 28-01-2023, 23:31:54
    #5
    A.AY adlı üyeden alıntı: mesajı görüntüle
    BeautifulSoup ile alabilirsiniz sanırım
    soup u BeautifulSoup ile parçalıyorum zaten hocam.diğer sitelerde alıyorum ama çiçeksepeti vermiyor.sıkıntı sadece çiçeksepetinde
  • 28-01-2023, 23:43:45
    #6
    Dinamik şekilde sonradan yükleniyor olabilir. En basit çözüm tarayıcı otomasyonu selenium gibi.
  • 28-01-2023, 23:53:12
    #7
    ethmtrgt adlı üyeden alıntı: mesajı görüntüle
    Dinamik şekilde sonradan yükleniyor olabilir. En basit çözüm tarayıcı otomasyonu selenium gibi.
    request ile çözüm imkanı yok mudur?Hocam
  • 28-01-2023, 23:59:44
    #8
    Selenium ve BeautifulSoup kullanarak resmin linkini almaya çalışabilirsiniz. Öncelikle gerekli kütüphaneleri kurmanız gerekir.
    pip install selenium
    pip install beautifulsoup4
    Örnek;
    from selenium import webdriver
    from bs4 import BeautifulSoup
    
    # Selenium ile tarayıcıyı açıyoruz
    driver = webdriver.Firefox()
    driver.get("https://example.com")
    
    # Tarayıcıda açılan sayfanın HTML içeriğini alıyoruz
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    
    # Resmin linkini arıyoruz
    img_tag = soup.find('img', {'class': 'product__image'})
    img_link = img_tag['src']
    
    # Tarayıcıyı kapatıyoruz
    driver.quit()
    
    print(img_link)
    Tarayıcıda açtığı sayfadaki resmin linkini arar ve ekrana yazdırır. Tarayıcı sürücüsünü (webdriver) indirmeniz gerekir. Firefox için geckodriver, Chrome için chromedriver gibi.
  • 29-01-2023, 00:01:41
    #9
    Tarayıcıya falan gerek yok. script bilgileri de zaten sayfanın içinde yükleniyor hocam. script de aynı yerden alıyor direk kaynak dataLayer içerek javascripttir ordan almak daha mantıklı buyrun

    import requests
    from bs4 import BeautifulSoup
    import json
    def find_between(s, start, end):
        return (s.split(start))[1].split(end)[0]
    
    uri = "https://www.ciceksepeti.com/t500-akilli-saat-smart-watch-turkce-menulu-arama-cevaplama-cift-tus-aktif-kcm51543257"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        }
            
    r = requests.get((uri), headers=headers, verify=True)
    soup = BeautifulSoup(r.content, "html.parser")
    
    # sadece scriptleri alıyorum html içinden 
    list_of_scripts = soup.findAll("script")
    
    
    product = ""
    # scriptlerin içinde bize gerekli olanı buluyoruz
    for script in list_of_scripts:
        if "ecomm_pagetype" in script.get_text():
            product = find_between(script.get_text(),'dataLayer = [','];')
            break
    # script içindeki dict python dict dönüştürdük
    productdict = json.loads(product)
    for item in productdict:
        print(item , productdict[item])
    Sadece resmi almak istiyorsanız aşağıdaki komutta yeterli
    print(productdict['productImage'])