Python ile Javascripti render ederken aşırı istek yaptığımdan pc kapanıyor?

S.a. arkadaşlar,

from requests_html import HTMLSession


def Render(url):
    session = HTMLSession()
    resp = session.get(url)
    resp.html.render()
    kaynak = resp.html.html
    return kaynak

Şu fonksiyona 600 ye yakın url gönderip. Javascripti render ediyorum. Ve html kaynağa ulaşıyorum. Fakat 250 300 url den sonra pc aşırı ısınıyor kapanıyor. Pc 8 çekirdek 16gb ram var. Aralara sleep koyup beklemek istemiyorum açıkcası. Bu thread v.b. yöntemlerle bu kapanmanın önüne geçebilirmiyim. Yukarıdaki fonksiyonun işlemi uzun sürüyor, uzun süreden kasıt her işlem için 1dk civarı diyebilirim, bu yüzden pc ısınıp kendini kapatıyor. Umarım sorunumu tam olarak açıklamışımdır. Yardımcı olursanız çok menmun olurum. Hoşcakalın.

Hocam biraz daha detaylı anlatabilirsiniz. Örneğin url’leri nasıl gönderiyorsunuz? Sayfaların boyutu ne kadar? Bu modülün sayfasından bilgi edindiğim kadarıyla, işlemlerin uzun sürmesinin normal olduğunu söyleyebilirim. Çünkü önce sayfa getiriliyor, sonra javascript yorumlanıyor ve sonra render edilerek return ediliyor.

Thread ile belki geçebilirsiniz ama sayfaların boyutu büyükse ve bir de javascript yorumlaması yapılıyorsa bekleme yine olacaktır.

Hocam merhaba,

Sayfaların boyutu 300KB civarında hocam. Thread ile nasıl yapabilirim bir örnek verebilirmisiniz kodum üstünden lütfen.

Url leri tam olarak şu şekilde gönderiyorum.

def Render(url):
    session = HTMLSession()
    resp = session.get(url)
    resp.html.render()
    kaynak = resp.html.html
    return kaynak

def icerikcek(url,urunadi):
    f = open('urun.html', 'a')
    print("dosya olusturuldu")
    kaynak = Render(url)
    f.write(str(kaynak.encode("utf-8")))
    f.close()
    print("dosyaya html yazildi")
    soup = BeautifulSoup(open("urun.html","r"),"html.parser")
    #print(soup)
    print("beatifulsoup calisti")
    resimler = re.findall('data-src="(.*?)"', str(soup))
    fiyat = re.findall('"price": "(.*?)",',str(soup))
    kategori= re.findall("\'item_category(.*?)<\/script>", str(soup))
    aciklama = soup.find("div", {"class":"collapse-body"})
    aa = aciklama.text.strip().replace("\n"," ").replace(" ","")
    katadi = kategori[0].replace("\\': \\'","").replace("\\'\\n});\\n","")
    print(urunadi,fiyat[0],katadi,aa)
    durum = "hayir"
    vendor = "sss"
    eskifiyat = "0"
    kargo = "0"    
      
    for i in resimler:
        
        resimadi = str(uuid.uuid1())
        resiadi = resimadi+".jpg"
        print("resim",i)
        resimacim = resimcekozgunlestir(i,resiadi)
        if resimacim !="hata":
            kullaniciadi = kadicek()
            params = (str(urunadi),  str(aa), str(fiyat[0]), str(eskifiyat), str(kargo), str(resimacim ),'none', str(url ), str(vendor),str(katadi).replace("&","-"),'hayir','','','',kullaniciadi.strip())
            #print(params)
            try:
                mycursor = mydb.cursor()
                sql = """INSERT INTO admin(urunadi,urunaciklama,fiyat,eskifiyat,kargo,resim,shortlink,url,vendor,kategoriadi,durum,hesap,pinurl,ard,kadi) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) """
                mycursor.execute(sql, params)
                mydb.commit()
            except:
                pass
                print("Ayni kayıt var ES Gecildi")
        else:
            print("hata var")
            pass
        
    os.remove('urun.html')
    print("dosya silindi")

def linkal(url,vendor,sayfa):
    
    browser = webdriver.Firefox()
    browser.maximize_window()
    
    for h in range(sayfa):
        h += 1
        if h == 1:
            browser.get(url)
        else:
            browser.get(url+"&id=1&page="+str(h))
        browser.set_page_load_timeout(30)
        time.sleep(5)
        elem = browser.find_element_by_xpath("//*")
        source_code = elem.get_attribute("outerHTML")
        f = open('fairyseason.html', 'a')
        f.write(str(source_code.encode("utf-8")))
        f.close()
        
    browser.quit()
    soup = BeautifulSoup(open("linkler.html","r"),"html.parser")
    linkler = soup.find_all('a', id=re.compile("^goodsid\_(\d+)"))
    #linkler = soup.find_all(re.findall('id="goodsid_59177" href="(.*?)"'))
    #linkler = re.findall('goodsid\_(\d+)"(\s+)href="(.*?)"', str(soup))
    print(linkler)
    cursor = mydb.cursor()
    for i, (gg) in enumerate(linkler):
        urller = gg['href']
        urunadi  = gg['title']
        print(i,"-",gg['href'],gg['title'])
        cursor.execute("SELECT * FROM admin WHERE vendor='"+str(vendor)+"' and url='"+str(urller)+"'") 
        rows = cursor.fetchall()
        if len(rows) >= 1:
            print("kayit var")
            print(rows)
        else:
            print("fonskiyon calistir")
            icerikcek(urller,urunadi)
    os.remove("linkler.html")

url = ""
vendor = ""
sayfa = 5
linkal(url,vendor,sayfa)

Hocam kodunuz üzerinden örnek vermem biraz zor çünkü kodlar biraz karışık. Ama sizin de öğrenmeniz açısından aşağıdaki sayfayı sizinle paylaşabilirim.

1 Beğeni

Multithreading CPU’nun daha az degil daha cok isinmasina neden olur. (Eger CPU’nun bulundugu oda CPU’dan daha soguksa)

Bilgisayarin asiri isinmadan kapanmasi bir hardware veya konfigurasyon sorunu.

Javascript kodlarinin neye benzedigini, ne yaptiklarini, degistirilme ihtimallerinin olup olmadiklarini bilmeden hic bir sey yapamayiz.

CPU fanini upgrade edebilirsin.

1 Beğeni

Ben tamamen yanlış biliyormuşum o zaman hocam :slight_smile: , Ben sanıyordumki thread açmak hem işleri hızlandırıyor hemde işlemleri sıraya koyduğundan cpu rahatlatıyor. Teşekkür ederim bilgilendirme için. İyi bir fan almak sorunu çözücek inş.