BeautifulSoup: Gabungkan teks peringkat atas dengan fungsi carian teg klasik?
P粉471207302
P粉471207302 2023-09-15 09:16:45
0
1
516

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粉471207302
P粉471207302

membalas semua(1)
P粉905144514

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']
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan