Rumah  >  Soal Jawab  >  teks badan

BeautifulSoup: Gabungkan teks peringkat atas dengan fungsi carian teg klasik?

Saya cuba menggunakan BeautifulSoup untuk mengekstrak maklumat daripada blok html berstruktur tidak seragam. Saya sedang mencari cara untuk menggabungkan blok teks antara tag dalam output carian/penapis. Contohnya, daripada html:

<span>
    <strong>Description</strong>
    Section1
    <ul>
        <li>line1</li>
        <li>line2</li>
        <li>line3</li>
    </ul>
    <strong>Section2</strong>
    Content2    
</span>

Saya ingin membuat senarai output yang mengabaikan jenis teg tertentu (ulli),但捕获顶级未标记文本。我发现的最接近的是 .select(':not(ul,li)').find_all(['strong']) dalam contoh di atas, tetapi kedua-duanya tidak boleh menangkap kedua-dua teks peringkat atas yang tidak berteg dan pelbagai teg sasaran. Gelagat yang ideal adalah seperti ini:

.find_all(['strong','UNTAGGED'])

menghasilkan output berikut:

[
<strong>Description</strong>,
Section1,
<strong>Section2</strong>,
Content2
]

P粉471207302P粉471207302421 hari yang lalu504

membalas semua(1)saya akan balas

  • P粉905144514

    P粉9051445142023-09-16 00:38:21

    Untuk mendapatkan output, anda boleh pilih ,然后选择它的next_sibling dahulu.

    Contoh
    from bs4 import BeautifulSoup
    html = '''
    <span>
        <strong>Description</strong>
        Section1
        <ul>
            <li>line1</li>
            <li>line2</li>
            <li>line3</li>
        </ul>
        <strong>Section2</strong>
        Content2    
    </span>
    '''
    soup = BeautifulSoup(html)
    
    data = []
    
    for e in soup.select('strong'):
        data.extend([e,e.next_sibling.strip()])
    
    data
    Output
    [<strong>Description</strong>,
     'Section1',
     <strong>Section2</strong>,
     'Content2']

    balas
    0
  • Batalbalas