BeautifulSoup : combiner du texte de niveau supérieur avec la fonctionnalité de recherche de balises classique ?
P粉471207302
P粉471207302 2023-09-15 09:16:45
0
1
423

J'essaie d'utiliser BeautifulSoup pour extraire des informations d'un bloc HTML structuré de manière non uniforme. Je cherche un moyen de combiner des blocs de texte entre les balises dans la sortie de recherche/filtrage. Par exemple, depuis le HTML :

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

Je souhaite créer une liste de sortie qui ignore certains types de balises (ulli),但捕获顶级未标记文本。我发现的最接近的是 .select(':not(ul,li)').find_all(['strong']) dans l'exemple ci-dessus, mais aucune d'entre elles ne peut capturer à la fois le texte de niveau supérieur non balisé et diverses balises cibles. Le comportement idéal serait quelque chose comme ceci :

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

produit le résultat suivant :

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

P粉471207302
P粉471207302

répondre à tous(1)
P粉905144514

Pour obtenir le résultat, vous pouvez d'abord sélectionner ,然后选择它的next_sibling.

Exemple
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
Sortie
[<strong>Description</strong>,
 'Section1',
 <strong>Section2</strong>,
 'Content2']
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!