• 10-02-2023, 01:33:58
    #1
    merhaba,

    beautiful soup ile veri çekerken şöyle bir sorunla karşılaştım. türk/yabancı forumlarda çözümünü bulamadım.

    <td class="center" id="a_b_ahmet">x</td>
    <td class="center" id="a_b_mehmet">y</td>
    <td class="center" id="a_b_ali">z</td>
    şimdi id tag'ı içinde, sondaki değişken kısmı nasıl görmezden gelebiliriz:

    soup.find_all(id='a_b_*') gibi bir formül var mı? (python konusunda çok yeniyim)

    not: id=True kullanamam, bir çok id dolu.

    teşekkürler:

    import re
    
    for a in soup.findAll('td', id=re.compile('a_b_')):
        print(a.text)
    veya

    for a in soup.findAll('td', id=lambda x: x and x.startswith('a_b_')):
        print(a.text)
    ile hallediliyormuş.
  • 10-02-2023, 01:38:40
    #2
    Regex kullanmayı deneyebilirsin.
  • 10-02-2023, 01:46:25
    #3
    css selector kullanırsan daha iyi yaparsın. bu arada çok daha hızlı paket olan selectolax öneririm

    bu da bazı örnekler


    <div id='element_123_wrapper_text'>
    aşağıdaki selector ile element_123 içeren id'ler seçilir
    '[id *="_123_ "]'

    [attribute~=value] '[title~=flower]'title değerinde "flower" içeren
    [attribute|=value]'[lang|=en]'lang attribute değeri en ile eşit olan veya en ile başlayanları seçer
    [attribute^=value] 'a[href^="https"]'a elementinde href değeri "https" ile başlayanları seçer
    gibi gibi örnekler buldum tamamına buradan ulaşabilirsin https://www.w3schools.com/cssref/css_selectors.php
  • 10-02-2023, 01:49:04
    #4
    import re
    
    html_doc = """
    <td class="center" id="a_b_ahmet">x</td>
    <td class="center" id="a_b_mehmet">y</td>
    <td class="center" id="a_b_ali">z</td> 
    """
    
    soup = BeautifulSoup(html_doc, 'html.parser')
    
    td_elements = soup.find_all('td')
    for td in td_elements:
        if re.match(r'a_b_.*', td['id']):
            print(td)
  • 10-02-2023, 02:02:07
    #5
    antijen adlı üyeden alıntı: mesajı görüntüle
    Regex kullanmayı deneyebilirsin.
    teşekkürler hocam. öğrendiğim iyi oldu. editledim.

    omergundogar adlı üyeden alıntı: mesajı görüntüle
    css selector kullanırsan daha iyi yaparsın. bu arada çok daha hızlı paket olan selectolax öneririm
    teşekkürler hocam. boş bir zamanımda inceleyeceğim.

    adwerd0z1 adlı üyeden alıntı: mesajı görüntüle
    import re
    
    html_doc = """
    <td class="center" id="a_b_ahmet">x</td>
    <td class="center" id="a_b_mehmet">y</td>
    <td class="center" id="a_b_ali">z</td> 
    """
    
    soup = BeautifulSoup(html_doc, 'html.parser')
    
    td_elements = soup.find_all('td')
    for td in td_elements:
        if re.match(r'a_b_.*', td['id']):
            print(td)
    teşekkürler hocam. bu da oluyormuş.
  • 10-02-2023, 02:04:23
    #6
    mos adlı üyeden alıntı: mesajı görüntüle
    teşekkürler hocam. öğrendiğim iyi oldu. editledim.



    teşekkürler hocam. boş bir zamanımda inceleyeceğim.



    teşekkürler hocam. bu da oluyormuş.
    Rica ederim
    selectolax:
    html_doc = """
    <td class="center" id="a_b_ahmet">x</td>
    <td class="center" id="a_b_mehmet">y</td>
    <td class="center" id="a_b_ali">z</td> 
    """
    
    root = html.fromstring(html_doc)
    
    td_elements = root.cssselect('td[id^="a_b_"]')
    for td in td_elements:
        print(td.text_content())