【问题标题】:Exclude inner tag and specific label with beautifulsoup用 beautifulsoup 排除内部标签和特定标签
【发布时间】:2018-09-23 03:11:30
【问题描述】:

这可能是一个基本问题,但我无法弄清楚。仍在学习如何使用 beautifulsoup。

我正在尝试解析看起来像

的 HTML
<dl class="">
<div>
<ol>
<li><label>Tournament Name</label>TCG Saturday</li>
<li><label id="tournament_id" data-tournament-id="000002">Tournament ID</label>000002</li>
<li><label>Category</label>TCG: Unlimited</li>
<li><label>Registration</label>12:15PM to 1:15PM</li>
<li><label>Status</label>Complete</li>
</ol>
</div>
</dl>

这样就只读取了 li 标签,而忽略了 label 标签。也就是说,生成的文本将是

TCG Saturday
000002
TCG: Unlimited
12:15PM to 1:15PM
Complete

我试过了

soup = BeautifulSoup(html)
for lis in soup.find_all('li'):
    print(lis.text)

但这也会导致读取标签标签的文本并将它们组合在一起。它还会读取网页上的一堆其他文本并打印出来。

Tournament NameTCG Saturday
Tournament ID000002
CategoryTCG: Unlimited
Registration12:15PM to 1:15PM
StatusComplete

我也可以使用

获取标签
soup = BeautifulSoup(html)
for lis in soup.find_all('label'):
    print(lis.text)

但之后没有文字(这是可以理解的)。

我不明白如何解析这个 HTML 以便我可以得到 ​​p>

1) 只是 li 标签中的文本,不包括 label 标签中的文本(如上预期)或

2) 特定标签的 li 标签中的文本(例如,指定“Tournament ID”标签并返回“000002”)。

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案1】:

    来自BeautifulSoup's 文档:

    decompose() 从树中删除一个标签,然后完全销毁它及其内容:

    代码:

    from bs4 import BeautifulSoup
    
    data = '''
    <dl class="">
    <div>
    <ol>
    <li><label>Tournament Name</label>TCG Saturday</li>
    <li><label id="tournament_id" data-tournament-id="000002">Tournament ID</label>000002</li>
    <li><label>Category</label>TCG: Unlimited</li>
    <li><label>Registration</label>12:15PM to 1:15PM</li>
    <li><label>Status</label>Complete</li>
    </ol>
    </div>
    </dl>
    '''
    
    soup = BeautifulSoup(data, 'html.parser')
    for lis in soup.find_all('li'):
        lis.label.decompose()
    print(soup.text)
    

    输出:

    TCG Saturday
    000002
    TCG: Unlimited
    12:15PM to 1:15PM
    Complete
    

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 2020-02-26
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多