Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
2
Cevap
276
Tıklama
0
Öne Çıkarma
Python iki kod arasındaki fark
P
geçen yıl
Er
Konu Sahibi

Merhaba python da bir kodum var ama bir kısmı çalışırken diğer kısım çalışmıyor.
import requests
from bs4 import BeautifulSoup
import pandas as pd

# Kullanıcıdan hisse kodunu al
hisse_kodu = input("Lütfen çekmek istediğiniz hisse kodunu girin: ")

# URL'yi oluştur
url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?hisseKod={hisse_kodu}"

# Sayfayı getirin
response = requests.get(url)

# HTML içeriğini analiz edin
soup = BeautifulSoup(response.content, "html.parser")

# Finansallar tablosunu bulun
finanslar_table = soup.find("table", {"id": "TBLFINANSALVERİLER1"})
# Finansallar tablosunu DataFrame çevir
finanslar_df = pd.read_html(str(finanslar_table))[0]

# Karlılık tablosunu bulun
karlilik_table = soup.find("table", {"id": "TBLFINANSALVERİLER2"})

# Karlılık tablosunu DataFrame'e çevirin
karlilik_df = pd.read_html(str(karlilik_table))[0]

# Çarpanlar tablosunu bulun
carpanlar_table = soup.find("table", {"id": "TBLFINANSALVERİLER3"})

# Çarpanlar tablosunu DataFrame'e çevirin
carpanlar_df = pd.read_html(str(carpanlar_table))[0]

# Excel dosyasını oluşturun ve DataFrame'leri yazın
with pd.ExcelWriter("veriler.xlsx", engine='xlsxwriter') as writer:
  # Finanslar tablosunu yazın
  finanslar_df.to_excel(writer, sheet_name='Finanslar', index=False)
   
  # Karlılık tablosunu yazın
  karlilik_df.to_excel(writer, sheet_name='Karlılık', index=False)
   
  # Çarpanlar tablosunu yazın
  carpanlar_df.to_excel(writer, sheet_name='Çarpanlar', index=False)
   
  # Her sayfadaki sütunları otomatik genişleme yapacak şekilde ayarlayın
  for sheet in writer.sheets:
    worksheet = writer.sheets[sheet]
    for i, column in enumerate(finanslar_df.columns):
      column_len = max(
        finanslar_df[column].astype(str).str.len().max(),
        len(column) + 2
      )
      worksheet.set_column(i, i, column_len)

print("Veriler başarıyla kaydedildi.")
Bu kodlar çalışıyor hiç bir hata yok
import requests
from bs4 import BeautifulSoup
import pandas as pd

# Kullanıcıdan sektörü al
sektor = input("Lütfen çekmek istediğiniz sektörü girin: ")

# URL'yi oluştur
url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?sector={sektor}"

# Sayfayı getirin
response = requests.get(url)

# HTML içeriğini analiz edin
soup = BeautifulSoup(response.content, "html.parser")

# Finansallar tablosunu bulun
finanslar_table = soup.find("table", {"id": "TBLFINANSALVERİLER1"})
# Finansallar tablosunu DataFrame çevir
if finanslar_table:
  finanslar_df = pd.read_html(str(finanslar_table))[0]
else:
  print("Finansal veriler tablosu bulunamadı.")

# Karlılık tablosunu bulun
karlilik_table = soup.find("table", {"id": "TBLFINANSALVERİLER2"})
# Karlılık tablosunu DataFrame'e çevirin
if karlilik_table:
  karlilik_df = pd.read_html(str(karlilik_table))[0]
else:
  print("Karlılık verileri tablosu bulunamadı.")

# Çarpanlar tablosunu bulun
carpanlar_table = soup.find("table", {"id": "TBLFINANSALVERİLER3"})
# Çarpanlar tablosunu DataFrame'e çevirin
if carpanlar_table:
  carpanlar_df = pd.read_html(str(carpanlar_table))[0]
else:
  print("Çarpanlar verileri tablosu bulunamadı.")

# Excel dosyasını oluşturun ve DataFrame'leri yazın
with pd.ExcelWriter("veriler.xlsx", engine='xlsxwriter') as writer:
  # Finanslar tablosunu yazın
  if 'finanslar_df' in locals():
    finanslar_df.to_excel(writer, sheet_name='Finanslar', index=False)
   
  # Karlılık tablosunu yazın
  if 'karlilik_df' in locals():
    karlilik_df.to_excel(writer, sheet_name='Karlılık', index=False)
   
  # Çarpanlar tablosunu yazın
  if 'carpanlar_df' in locals():
    carpanlar_df.to_excel(writer, sheet_name='Çarpanlar', index=False)
   
  # Her sayfadaki sütunları otomatik genişleme yapacak şekilde ayarlayın
  for sheet in writer.sheets:
    worksheet = writer.sheets[sheet]
    for i, column in enumerate(finanslar_df.columns):
      column_len = max(
        finanslar_df[column].astype(str).str.len().max(),
        len(column) + 2
      )
      worksheet.set_column(i, i, column_len)

print("Veriler başarıyla kaydedildi.")
Bu kodlar çalışmıyor ben şunu yapmaya çalışıyorum web sitesinin ilgili sektör ismindeki tüm hisselerin verilerini çekmek
Kodları birleştirmeyi denedim yine aynı şekilde ikinci kodlamada tabloların bulunamadığına dair uyarı alıyorum

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil




P
geçen yıl
Er
Konu Sahibi

import requests
from bs4 import BeautifulSoup
import pandas as pd

# Kullanıcıdan sektörü veya hisse kodunu al
secim = input("Hisse kodu mu (H) yoksa sektör mü (S) çekmek istersiniz?: ").upper()

if secim == "H":
  # Kullanıcıdan hisse kodunu al
  hisse_kodu = input("Lütfen çekmek istediğiniz hisse kodunu girin: ")

  # URL'yi oluştur
    url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?hisseKod={hisse_kodu}"
else:
  # Kullanıcıdan sektörü al
  sektor = input("Lütfen çekmek istediğiniz sektörü girin: ")

  # URL'yi oluştur
    url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?sector={sektor}"

# Sayfayı getirin
response = requests.get(url)

# HTML içeriğini analiz edin
soup = BeautifulSoup(response.content, "html.parser")

# Finansal veri tablolarını bul
finanslar_table = soup.find("table", {"id": "TBLFINANSALVERİLER1"})
karlilik_table = soup.find("table", {"id": "TBLFINANSALVERİLER2"})
carpanlar_table = soup.find("table", {"id": "TBLFINANSALVERİLER3"})

# Excel dosyasını oluşturun ve DataFrame'leri yazın
with pd.ExcelWriter("veriler.xlsx", engine='xlsxwriter') as writer:
  # Hisse kodu için
  if secim == "H":
    finanslar_df = pd.read_html(str(finanslar_table))[0]
    karlilik_df = pd.read_html(str(karlilik_table))[0]
    carpanlar_df = pd.read_html(str(carpanlar_table))[0]

    # DataFrame'leri oluşturun ve her biri için ayrı bir sayfaya yazın
    finanslar_df.to_excel(writer, sheet_name='Finanslar', index=False)
    karlilik_df.to_excel(writer, sheet_name='Karlılık', index=False)
    carpanlar_df.to_excel(writer, sheet_name='Çarpanlar', index=False)
  # Sektör için
  else:
    if finanslar_table and karlilik_table and carpanlar_table:
      finanslar_df = pd.read_html(str(finanslar_table))[0]
      karlilik_df = pd.read_html(str(karlilik_table))[0]
      carpanlar_df = pd.read_html(str(carpanlar_table))[0]

      # DataFrame'leri oluşturun ve her biri için ayrı bir sayfaya yazın
      finanslar_df.to_excel(writer, sheet_name='Finanslar', index=False)
      karlilik_df.to_excel(writer, sheet_name='Karlılık', index=False)
      carpanlar_df.to_excel(writer, sheet_name='Çarpanlar', index=False)
    else:
      print("Sektör verileri bulunamadı.")

print("Veriler başarıyla kaydedildi.")
Kodları birleştirmeyi denedim ama çözüm olmadı



W
geçen yıl
Yüzbaşı

Eğer sayfa JavaScript ile içerik yükleniyorsa, <code>selenium</code> gibi bir kütüphane kullanmanız gerekebilir. Tablo ID'lerini doğrudan belirtmek yerine, sayfadaki tüm tabloları bulan ve belirli kriterlere göre filtreleyen bir yaklaşım daha doğru olabilir. Bunlara ek olarak try except ile hata kontrolleri eklerseniz hatanın kaynağını daha rahat bulursunuz.

Kullanıcı girdisi, seçilen sektöre özgü web sayfasından veri çekme, çekilen veriyi çeşitli tablolara ayrıştırma, bu tabloları farklı Excel sayfalarında kaydetme ve sütun genişliklerini otomatik olarak ayarlama yapacak bir koda ihtiyacınız var sanıyorum. Ancak bazı kısımlarda, özellikle tablo bulunamadığında nasıl bir işlem yapılması gerektiği belirsiz.

import requests
from bs4 import BeautifulSoup
import pandas as pd

def fetch_and_save_sector_data(sector):
    url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?sector={sector}"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

    # Finansallar, Karlılık ve Çarpanlar tablolarını bul
    tables_ids = ['TBLFINANSALVERİLER1', 'TBLFINANSALVERİLER2', 'TBLFINANSALVERİLER3']
    dataframes = {}
    for table_id in tables_ids:
        table = soup.find("table", {"id": table_id})
        if table:
            dataframes[table_id] = pd.read_html(str(table))[0]
        else:
            print(f"{table_id} tablosu bulunamadı.")

    # Tablo bulunamazsa işlemi durdur
    if not dataframes:
        print("Hiçbir finansal veri tablosu bulunamadı.")
        return

    # Verileri Excel dosyasına kaydet
    with pd.ExcelWriter("sektor_verileri.xlsx", engine='xlsxwriter') as writer:
        for table_id, df in dataframes.items():
            sheet_name = table_id.replace('TBLFINANSALVERİLER', 'Tablo ')
            df.to_excel(writer, sheet_name=sheet_name, index=False)
            
            # Sütun genişliklerini ayarla
            worksheet = writer.sheets[sheet_name]
            for col_num, value in enumerate(df.columns.values):
                column_len = max(df[value].astype(str).map(len).max(), len(value) + 2)
                worksheet.set_column(col_num, col_num, column_len)

    print("Veriler başarıyla Excel dosyasına kaydedildi.")


sektor = input("Lütfen çekmek istediğiniz sektörü girin: ")
fetch_and_save_sector_data(sektor)

Yazmış olduğunuz son koda göre ise şöyle yapabiliriz (Kullanıcı daha açık direktiflerle yönlendirildi, kod tekrarı ortadan kaldırıldı, girinti hataları düzeltildi, hata denetimi adımları eklendi)

import requests
from bs4 import BeautifulSoup
import pandas as pd

def fetch_and_save_data():
    print("Belirli bir stok koduna veya sektöre ait verileri alabilirsiniz.")
    print("Stok kodu için 'H' veya sektör için 'S' girin.")
    
    choice = input("Seçiminiz (H/S): ").upper()
    while choice not in ('H', 'S'):
        print("Geçersiz seçim. Lütfen Stok kodu için 'H' veya sektör için 'S' girin.")
        choice = input("Seçiminiz (H/S): ").upper()

    entity_type = 'hisseKod' if choice == 'H' else 'sector'
    entity_value = input(f"Lütfen giriş yapın {('stock code' if choice == 'H' else 'sector')}: ").strip()
    while not entity_value:
        print(f"Geçersiz girdi. {'stock code' if choice == 'H' else 'sector'} uygun şekilde giriş yapmalısınız.")
        entity_value = input(f"Lütfen girişinizi yapın {('stock code' if choice == 'H' else 'sector')}: ").strip()

    url = f"https://analizim.halkyatirim.com.tr/Financial/ScoreCardDetail?{entity_type}={entity_value}"
    response = requests.get(url)
    if response.status_code != 200:
        print(f"Veriler getirilemedi. Sunucu {response.status_code} durum koduyla yanıt verdi.")
        return

    soup = BeautifulSoup(response.content, "html.parser")

    tables = {
        "Finanslar": "TBLFINANSALVERİLER1",
        "Karlılık": "TBLFINANSALVERİLER2",
        "Çarpanlar": "TBLFINANSALVERİLER3"
    }

    try:
        with pd.ExcelWriter(f"{entity_value}_financial_data.xlsx", engine='xlsxwriter') as writer:
            for sheet_name, table_id in tables.items():
                table = soup.find("table", {"id": table_id})
                if table:
                    df = pd.read_html(str(table))[0]
                    df.to_excel(writer, sheet_name=sheet_name, index=False)
                else:
                    print(f"{sheet_name} için veri bulunamadı.")
        print("Veri başarıyla kaydedildi.")
    except Exception as e:
        print(f"Hata meydana geldi: {e}")

fetch_and_save_data()





DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.