搜尋

首頁  >  問答  >  主體

BeautifulSoup:將頂級文字與經典標籤查找功能結合?

我正在嘗試使用 BeautifulSoup 從非統一結構的 html 區塊中提取資訊。我正在尋找一種方法來組合搜尋/過濾器輸出中標籤之間的文字區塊。例如,來自 html:

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

我想建立一個輸出列表,忽略某些類型的標籤(上例中的 ulli),但捕獲頂級未標記文字。我發現的最接近的是.select(':not(ul,li)').find_all(['strong']),但兩者都不是它們可以同時捕捉未標記的頂級文字和各種目標標記。理想的行為是這樣的:

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

產生如下輸出:

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

P粉471207302P粉471207302480 天前541

全部回覆(1)我來回復

  • P粉905144514

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

    要獲得輸出,您可以先選擇,然後選擇它的next_sibling

    範例
    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
    輸出
    [<strong>Description</strong>,
     'Section1',
     <strong>Section2</strong>,
     'Content2']

    回覆
    0
  • 取消回覆