Merhaba, verdiğiniz siteden yıldız sayısını almak mümkün değil. Sıkıntı benden mi bilmiyorum ama, siteden veri çekerken sitenin kaynak kodları yüklenmediğinden sorun yaşadım. Sizin dediğiniz şey böyle bir şey olmalı.
import sqlite3 as sql
import bs4, requests
import requests_html
import datetime
import pandas
def db_olustur():
db_olustur.db = sql.connect("siteler.db")
db_olustur.cs = db_olustur.db.cursor()
return db_olustur.db, db_olustur.cs
def hata_kayit(hata):
with open("hatakaydi.log","a") as dosya_islemi:
dosya_islemi.write(f"[{datetime.datetime.now().strftime('%d/%m/%Y saat: %H:%M:%S')}] Beklenmedik bir hata oluştu: {hata}\n")
def veri_cek1(site):
try:
oturum = requests_html.HTMLSession()
istek = oturum.get(site,headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"})
istek.html.render(timeout=45,sleep=1.5)
veriler = {site:{isim: bilgi for isim, bilgi in zip([isim.text for isim in istek.html.find(".prdct-desc-cntnr-name")],zip([uretici.text for uretici in istek.html.find(".prdct-desc-cntnr-ttl")],[fiyat.text for fiyat in istek.html.find(".prc-box-dscntd")], [degerlendirme_sayisi.text.replace("(","").replace(")","") for degerlendirme_sayisi in istek.html.find(".ratingCount")]))}}
istek.close()
oturum.close()
return veriler
except Exception as hata:
hata_kayit(hata)
print("Beklenmedik bir hata oluştu:",hata)
def veri_cek2(site):
try:
istek = requests.get(site)
metin_bolucu = bs4.BeautifulSoup(istek.text,"html.parser")
return {site:{isim: bilgi for isim, bilgi in zip([isim.text for isim in metin_bolucu.find_all("span",{"class":"prdct-desc-cntnr-name"})],zip([uretici.text for uretici in metin_bolucu.find_all("span",{"class":"prdct-desc-cntnr-ttl"})],[fiyat.text for fiyat in metin_bolucu.find_all("div",{"class":"prc-box-dscntd"})], [degerlendirme_sayisi.text.replace("(","").replace(")","") for degerlendirme_sayisi in metin_bolucu.find_all("span",{"class":"ratingCount"})]))}}
except Exception as hata:
hata_kayit(hata)
print("Beklenmedik bir hata oluştu:",hata)
def kaydet(veriler,tablo):
cs.execute(f"CREATE TABLE IF NOT EXISTS {tablo} (isim, uretici, fiyat, yorum)")
for isim,bilgiler in list(veriler.values())[0].items():
cs.execute(f"INSERT INTO {tablo} VALUES (?,?,?,?)",(isim,bilgiler[0],bilgiler[1],bilgiler[2]))
db.commit()
print("İşlem tamamlandı!")
def guncelle(veriler,tablo):
cs.execute(f"TRUNCATE FROM {tablo}")
for isim,bilgiler in list(veriler.values())[0].items():
cs.execute(f"INSERT INTO {tablo} VALUES (?,?,?,?) ",(isim,bilgiler[0],bilgiler[1],bilgiler[2]))
def yazdir(tablo):
cs.execute(f"SELECT * FROM {tablo}")
for satir in cs.fetchall():
print(satir)
def disa_aktar(tablo,uzanti):
if uzanti.lower() == "txt":
with open(f"{tablo}.txt","a") as dosya_islemleri:
cs.execute(f"SELECT * FROM {tablo}")
veriler = cs.fetchall()
dosya_islemleri.write("İsim | Üretici | Fiyat | Değerlendirme Sayısı\n\n")
dosya_islemleri.writelines([f"{isim} | {uretici} | {fiyat} | {degerlendirme_sayisi}\n" for isim,uretici,fiyat,degerlendirme_sayisi in veriler])
elif uzanti.lower() == "csv":
veriler = pandas.read_sql(f"SELECT * FROM {tablo}",db)
veriler.to_csv(f"{tablo}.csv")
if __name__ == "__main__":
db, cs = db_olustur()
kaydet(veri_cek2("site"),"siteadi")
disa_aktar("siteadi","txt")
while True: guncelle(veri_cek2,"siteadi")