Kaynaktan Gelen Veriyi Text'e Çevirmede Sorun

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]))