Sadece sonuç odaklı ve işin görülsün diye kendimce bir kod yazdım…Daha farklı çözümleri var onları da bulmak için ilgileneceğim:)
İlk olarak headers ekledim.
headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"}
Kodda yazmadığım olay şu önce td etiketlerini aldım tam 929 tane ardından bizim istediğimizin sırasını buldum.
918. td etiketi bizim istediğimiz yer>> <td>8,0</td>
Ayıklamak için de split kullandım.
Yardımlar için teşekkür ederim ama sonuca ulaşamadım. @Efkan tek bir sayfada çalışıyor ama çoklu sayfada sorun oluyor. stackoverflow çözümüde maalesef cözüm değil. Büyük ihtimalle sayfa kodlamasıyla alakalı bir durum. Belirli bir sistematiğe oturmuyor.
Aynı değer yahoo üzerinde buldum.
liste=[]
for x in kodlar:
url=f"https://finance.yahoo.com/quote/"+x
print(url)
response = requests.get(url)
html_icerigi = response.content
corba = BeautifulSoup(html_icerigi,"html.parser")
deger = corba.find("td",{"class":"Ta(end) Fw(600) Lh(14px)"})
liste.append(deger)
print(deger)
print(liste)
sonuç boş geliyor.
sayfanın kaynak koduna bakınca
<span>PE Ratio (TTM)</span></td><td class="Ta(end) Fw(600) Lh(14px)" data-test="PE_RATIO-value">3.34</td>
almak istediğim değer 3.34
url’yi url=f"https://finance.yahoo.com/quote/ATAGY.IS şeklinde deneyebilirsiniz.
Kodu işe yaramıyor çünkü benzer adda farklı classlar da var.Sen sadece 3,34 ü çekmiyorsun dizi çekiyorsun birden çok class olduğu için.Onun için ögeyi incelediğinde DATA-TEST diye bir şey var onu kullanarak aradım.
Eğer farklı sitelerden tek bir fonksiyon ile veri çekip kaşılaştırma gibi bir şeyler deniyorsan olmaz çünkü dediğin gibi her sitenin altyapısı(kodları vs) farklı.
Senin koddaki deger değişkeninin ne çektiğine bakalım…