在python BS4中提取特定文本?

2024-06-26 10:02:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图提取BS4中的某些文本。下面是示例HTML

</tr><tr id="_Gonzaga" class="seedrow"> <td title="Click to show/hide ranks" class='lowrowclick' style="text-align:center;font-size:8px">2</td> <td id='Gonzaga' class="teamname"><a href="team.php?team=Gonzaga&year=2019" style="text-decoration: none;">Gonzaga<span class="lowrow" style="font-size:10px"><br/>&nbsp;&nbsp;&nbsp;1 seed, <span style='background-color:#BAE2C6'>Elite Eight</span></span></a></td>

目前的代码是:

data = soup.findAll('tr', attrs={"class": "seedrow"})
team_name = item.find('td', class_ = 'teamname')
team_id = team_name.find('a').contents[0]
seed = team_name.find('span').text
print(team_id, seed)

这将返回:

Gonzaga, '\xa0\xa0\xa01 seed, Elite Eight'

我想要的是:

Gonzaga, 1 seed, Elite Eight

Tags: textnameidstylefindtrteamclass
1条回答
网友
1楼 · 发布于 2024-06-26 10:02:21

如果我没弄错的话,你想提取3个分开的字符串。您可以将.get_text()与自定义separator=字符一起使用,然后在此字符上拆分:

from bs4 import BeautifulSoup


txt = '''
<tr id="_Gonzaga" class="seedrow">
<td title="Click to show/hide ranks" class='lowrowclick' style="text-align:center;font-size:8px">2</td>
<td  id='Gonzaga' class="teamname"><a href="team.php?team=Gonzaga&year=2019" style="text-decoration: none;">Gonzaga<span class="lowrow" style="font-size:10px"><br/>&nbsp;&nbsp;&nbsp;1 seed, <span style='background-color:#BAE2C6'>Elite Eight</span></span></a></td>
</tr>'''

soup = BeautifulSoup(txt, 'html.parser')
data = soup.findAll('tr', attrs={"class": "seedrow"})

for item in data:
    team_name = item.find('td', class_ = 'teamname')

    a, b, c = team_name.get_text(strip=True, separator='|').split('|')

    print(a)
    print(b.strip(','))
    print(c)

印刷品:

Gonzaga
1 seed
Elite Eight

相关问题 更多 >