使用beautifulsoup

时间:2018-04-12 20:37:13

标签: python html web-scraping beautifulsoup

这可能是一个基本问题,但我还没能弄明白。还在学习如何使用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,以便我可以

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

2)特定标签的li标签中的文字(例如,指定&#34;锦标赛ID&#34;标签并获得&#34; 000002&#34;返回)。

1 个答案:

答案 0 :(得分:0)

来自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