Merhaba, ben https://www.kap.org.tr/tr/bist-sirketler sitesinden beautifulsoup ile borsa hisselerinin kısa adı ve uzun adlarını çekmek için veri kazıma denemeleri yapıyorum. Fakat şöyle bir sorunum var, önce tablodaki kısa isimleri çekebiliyorum, daha sonra bu kısa isimlerin her birinin bir alt satırına uzun isimlerinin gelmesini istiyorum. Bunu yapmak için find.all’ı bir kere kullanmak istiyorum. print ile alt alta istediğim verileri çekebilmek istiyorum fakat yazdığım kodu çalıştıramıyorum. Çalıştırdığım kodda da önce kısa isimler geliyor sonra en alta uzun isimler geliyor. Örnek kodumu aşağıda görebilirsiniz. Bu sadece kısa isimleri çeken kod, en sondaki print(link.text) altına bir print daha ekleyip diğer verileri de çekebilirsem arasına girmiş olacak sanırım.
import requests
from bs4 import BeautifulSoup
r = requests.get(“https://www.kap.org.tr/tr/bist-sirketler”)
source = BeautifulSoup(r.content,“html.parser”)
bist = source.find_all(“div”, attrs={“class”: “comp-cell _04 vtable”})
for link in bist:
print(link.text)
Merhaba,
Tablodaki kodlar ve şirket unvanları, class
değeri "w-clearfix w-inline-block comp-row"
olan div
etiketlerinin içinde yer alıyorlar. Ve hem kod hem de şirket unvanı, farklı class
değerleri olan div
etiketlerinin içinde yer alan anchor
etiketlerinin text
değerleri.
Bu div
'in içinde 3 adet anchor
etiketi var. İlk iki etiket, kod ve şirket unvanına ait. O halde bu div
'in içindeki anchor
etiketlerinin text
değerlerini bir liste içine toplar ve bu listenin ilk iki elemanını alırsanız, kod ve şirket unvanlarına ulaşırsınız.
Kodlar:
import requests
from bs4 import BeautifulSoup
r = requests.get("https://www.kap.org.tr/tr/bist-sirketler")
source = BeautifulSoup(r.content, "html.parser")
bist = source.find_all(
"div",
attrs={"class": "w-clearfix w-inline-block comp-row"}
)
for i in bist:
a = [j.text for j in i.find_all("a")]
print(f"{a[0]}\n{a[1]}\n")
Merhaba teşekkür ederim kodlarla istediğim çıktıyı elde ettim. Kod için nereyi alacağımı görmüş oldum fakat bu kısmı tam anlayamadım kodu daha temiz yazabilir miyiz ? Yazamaz isek açıklamasını detaylı yapabilirseniz çok sevinirim.
for i in bist:
a = [j.text for j in i.find_all(“a”)]
print(f"{a[0]}\n{a[1]}\n")
a[0:1] gibi birşey olabilir
for i in bist:
a = []
for j in i.find_all("a"):
a.append(j.text)
print("{}\n{}\n".format(a[0], a[1]))