Şimdi Ara

Python iki kod arasındaki fark

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
139
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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









  • 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ı





  • Eğer sayfa JavaScript ile içerik yükleniyorsa, selenium 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.


    Kod

    Yığını:
    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)


    Kod

    Yığını:
    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()




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.