• 18-02-2024, 14:02:53
    #1
    Selamun Aleyküm dostlar;

    Web sitesinin birisinden veri çekmek istiyorum. Ama kodu çekemedim. Yardımcı olacak birisi var mı?



    Web de ki çıktıyı ve kodu aşağıya koydum. Yardımcı olacak birisi olursa sevinirim.


    Çıktı
    
    <div id="tbl2" class="YeniBolme" style="width: 1010px;">
            <h5>
                Birim / Cihaz Bilgileri</h5>
            <ul id="BirimCihazlistesi">
                <li class="borderbottomli" style="padding-bottom: 0px;">
                    <ul>
                        <li class="abone"><span>Abone</span></li>
                        <li class="abone"><span>Abone Adı</span></li>
                        <li class="aboneNo"><span>Abone No</span> </li>
                        <li class="aboneSayac"><span>Sayaç</span></li>
                        <li class="Tuketim"><span>m³/h</span></li>
                        <li class="Basinc"><span>mbar</span> </li>
                        <li class="BirimAlan"><span>m²</span></li>
                        <li class="TesisatBaglanti"><span>Boru Tipi</span></li>
                        
                        
                        <li class="CihazBilgisi">
                            <ul style="width: 400px;">
                                <li class="ChzCihaz"><span>Cihaz</span></li>
                                <li class="ChzKapasite"><span>Kapasite</span></li>
                                <li class="ChzDebi"><span>Debi</span></li>
                                <li class="ChzMarka"><span>Marka</span></li>
                                <li class="ChzModel"><span>Model</span></li>
                                <li class="ChzBacaTipi"><span>Baca</span></li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li class="borderbottomli"><ul><li class="abone">D33</li><li class="abone">İSMAİL SEZİKLİ</li><li class="aboneNo">55349658</li><li class="aboneSayac">G4</li><li class="Tuketim">3.5</li><li class="Basinc">21 </li><li class="BirimAlan">66</li><li class="TesisatBaglanti">Çelik Boru</li><li class="CihazBilgisi"><ul class="CihazIcListesi"><li class="btnBorderCizli"><ul style="width: 395px;" class="btnBorderCizli"><li class="ChzCihaz">Kombi</li><li class="ChzKapasite">17200</li><li class="ChzDebi">2.5</li><li class="ChzMarka">DemirDöküm</li><li class="ChzModel">ademiX P 18/24-AS/1 (H-TR)</li><li class="ChzBacaTipi">HERMETİK</li></ul></li><li class="btnBorderCizli"><ul style="width: 395px;" class="btnBorderCizli"><li class="ChzCihaz">Ocak</li><li class="ChzKapasite">7740</li><li class="ChzDebi">1.6</li><li class="ChzMarka"></li><li class="ChzModel"></li><li class="ChzBacaTipi">AÇIK</li></ul></li></ul> </li> <li class="TesisatBaglanti"><a href="http://rapor.zetacad.com/AboneBilgilendirmeRaporu.aspx?pid=10037742&amp;bid=16237781" target="_blank"><img src="http://rapor.zetacad.com/images/digerleri.svg" alt="AboneRapor"></a></li></ul>  </li>
            </ul>
        </div>

    Kod:
    # JSON formatına çevir ve ekrana yazdır
    json_data = json.dumps(values_dict, indent=4, ensure_ascii=False)
    print(json_data)
    
    # Belirli bir elementi bul
    ul_element = soup.find('ul', id='BirimCihazlistesi')
    
    # Değerleri saklamak için boş bir sözlük oluştur
    values_dict = {}
    
    # İstenen özelliklerin listesi
    properties = ['Abone', 'Abone Adı', 'Abone No', 'Sayaç', 'm³/h', 'mbar', 'm²', 'Boru Tipi', 'Cihaz', 'Kapasite', 'Debi', 'Marka', 'Model', 'Baca']
    
    # İstenen özellikleri bulup values_dict'e ekleyin
    for li_element, prop in zip(ul_element.find_all('li', recursive=False)[1:], properties):
    value = li_element.text.strip()
    if value:
    values_dict[prop] = value
    
    # Çıktıları ayrı dictionary'ler olarak saklamak için liste oluştur
    output_list = [{prop: values_dict[prop]} for prop in properties if prop in values_dict]
    
    # JSON formatına çevir ve ekrana yazdır
    json_data = json.dumps(output_list, indent=4, ensure_ascii=False)
    print(json_data)
  • 18-02-2024, 14:08:47
    #2
    bu kodu anlamadım Ben sanırım cahilliğimden request ile mi almaya çalışıyorsun selenium ile mi ?
    tek bir tane mi alacan o sayfadan yoka liste halinde atıyorum 10 20 veya 1000 tanemi ?

    Bence bs4 kullanman lazım gelen contenti zannımca tabi bilmediğim bir şey olursa yanlış yönlendirmiş olmıyıyım
  • 18-02-2024, 14:09:44
    #3
    Melihhh adlı üyeden alıntı: mesajı görüntüle
    bu kodu anlamadım Ben sanırım cahilliğimden request ile mi almaya çalışıyorsun selenium ile mi ?
    tek bir tane mi alacan o sayfadan yoka liste halinde atıyorum 10 20 veya 1000 tanemi ?

    Bence bs4 kullanman lazım gelen contenti zannımca tabi bilmediğim bir şey olursa yanlış yönlendirmiş olmıyıyım
    Kodun tamamını atayım hocam,


    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from time import sleep
    from bs4 import BeautifulSoup
    
    # Kullanıcı adı ve şifre
    kullanici_adi = "demo"
    sifre = "demo"
    
    # Proje ID
    proje_id = "9988985"
    
    # Chrome tarayıcısı
    driver = webdriver.Chrome()
    
    # Web sitesine git
    driver.get("https://samgaz.zetacad.com/")
    
    # Kullanıcı adı ve şifre alanlarını bul
    kullanici_adi_alani = WebDriverWait(driver, 5).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "input[name='UserName']"))
    )
    sifre_alani = WebDriverWait(driver, 5).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "input[name='Password']"))
    )
    
    # Kullanıcı adı ve şifreyi gir
    kullanici_adi_alani.send_keys(kullanici_adi)
    sifre_alani.send_keys(sifre)
    
    # Giriş düğmesine tıkla
    giris_butonu = WebDriverWait(driver, 5).until(
    EC.visibility_of_element_located((By.ID, "loginformbutton"))
    )
    giris_butonu.click()
    
    time.sleep(5)
    
    driver.get("https://samgaz.zetacad.com/index.asp?Page=PrjDetay&P_ID=10037742")
    
    time.sleep(3)
    
    # Tüm HTML kodlarını al
    html_kaynagi = driver.page_source
    
    # BeautifulSoup ile parse et
    soup = BeautifulSoup(html_kaynagi, 'html.parser')
    
    
    
    # Belirli bir elementi bul
    # element = soup.find('div', id='my-element')
    
    # Elementin özelliklerine eriş
    # element_id = element['id']
    
    # ...
    
    # Belirli bir elementi bul
    td_elements = soup.find_all('td', class_='Text')
    
    for td_element in td_elements:
    if td_element.text.strip() == 'İlçe':
    # İlçe elementini bulduk, şimdi bir sonraki kardeşini bulup yazdırabiliriz
            value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    print(value_element.text.strip())
    import json
    import json
    
    # Belirli bir elementi bul
    td_elements = soup.find_all('td', class_='Text')
    
    # Değerleri saklamak için boş bir sözlük oluştur
    values_dict = {}
    
    for td_element in td_elements:
    if td_element.text.strip() == 'İlçe':
    # İlçe elementini bulduk, şimdi bir sonraki kardeşini bulup yazdırabiliriz
            value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['İlçe'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Mahalle':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Mahalle'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Sokak':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Sokak'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Kapı No':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Kapı No'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Onay Tarihi':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Onay Tarihi'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Onay Kodu':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Onay Kodu'] = value_element.text.strip()
    
    elif td_element.text.strip() == 'Tesisat No':
    value_element = td_element.find_next_sibling('td', class_='value')
    if value_element:
    values_dict['Tesisat No'] = value_element.text.strip()
    
    
    # JSON formatına çevir ve ekrana yazdır
    json_data = json.dumps(values_dict, indent=4, ensure_ascii=False)
    print(json_data)
    
    # Belirli bir elementi bul
    ul_element = soup.find('ul', id='BirimCihazlistesi')
    
    # Değerleri saklamak için boş bir sözlük oluştur
    values_dict = {}
    
    # İstenen özelliklerin listesi
    properties = ['Abone', 'Abone Adı', 'Abone No', 'Sayaç', 'm³/h', 'mbar', 'm²', 'Boru Tipi', 'Cihaz', 'Kapasite', 'Debi', 'Marka', 'Model', 'Baca']
    
    # İstenen özellikleri bulup values_dict'e ekleyin
    for li_element, prop in zip(ul_element.find_all('li', recursive=False)[1:], properties):
    value = li_element.text.strip()
    if value:
    values_dict[prop] = value
    
    # Çıktıları ayrı dictionary'ler olarak saklamak için liste oluştur
    output_list = [{prop: values_dict[prop]} for prop in properties if prop in values_dict]
    
    # JSON formatına çevir ve ekrana yazdır
    json_data = json.dumps(output_list, indent=4, ensure_ascii=False)
    print(json_data)
  • 18-02-2024, 14:16:13
    #4
    Bak şimdi oldu işte
    kardeş şimdi tarattığın sayfada bir tane mi var ?
    mesela bunu selenium ile direk oranın xpahtı üzerinden oradaki text alabilirsin yada id üzerindne yada name üzerinden onları satır satır alııp istediğin şekilde ister sql ister txt ye direk kaydedebilirsin burada bakınca yazdığın kod çok karışık geldi Bana
    mesela yakaladıklarını bir listeye atsan oradan sonra json yapsan rahat rahat yada jsona niye çevirmekk istiyorsun tam anlamadım
  • 18-02-2024, 14:27:27
    #5
    Selamlar hocam, profesyonel destek düşünürseniz pm'den ulaşabilirsiniz. Tarayıcı kullanmayan request tabanlı bir çözüm sunabilirim.
  • 18-02-2024, 17:46:14
    #6
    # Belirli bir elementi bul
    ul_element = soup.find('ul', id='BirimCihazlistesi')
    den sonra aşağıdakileri yazıp bir denermisiniz

    li = ul_element.findAll('li', class_='borderbottomli')[1]
        
        cihazlar = []
       
        for cihaz in li.findAll("ul", class_='btnBorderCizli'):
            cihaz_bilgisi = {
                "Cihaz": cihaz.find(class_="ChzCihaz").text.strip(),
                "Kapasite": cihaz.find(class_="ChzKapasite").text.strip(),
                "Debi": cihaz.find(class_="ChzDebi").text.strip(),
                "Marka": cihaz.find(class_="ChzMarka").text.strip() if cihaz.find(class_="ChzMarka") else "",
                "Model": cihaz.find(class_="ChzModel").text.strip() if cihaz.find(class_="ChzModel") else "",
                "BacaTipi": cihaz.find(class_="ChzBacaTipi").text.strip(),
            }
            cihazlar.append(cihaz_bilgisi)
        # Abone ve cihaz bilgileri
        abone_bilgisi = {
            "Abone": li.find(class_="abone").text.strip() if li.find(class_="abone") else None,
            "Abone Adı": li.find(class_="abone").next_sibling.text.strip() if li.find(class_="abone") and li.find(class_="abone").next_sibling else None,
            "Abone No": li.find(class_="aboneNo").text.strip() if li.find(class_="aboneNo") else None,
            "Sayaç": li.find(class_="aboneSayac").text.strip() if li.find(class_="aboneSayac") else None,
            "Tüketim": li.find(class_="Tuketim").text.strip() if li.find(class_="Tuketim") else None,
            "Basınç": li.find(class_="Basinc").text.strip() if li.find(class_="Basinc") else None,
            "Birim Alan": li.find(class_="BirimAlan").text.strip() if li.find(class_="BirimAlan") else None,
            "Tesisat Bağlantı": li.find(class_="TesisatBaglanti").text.strip() if li.find(class_="TesisatBaglanti") else None,
            "Cihaz Bilgileri": cihazlar
        }
        
        json_data = json.dumps(abone_bilgisi, indent=4, ensure_ascii=False)
        print(json_data)