如何使用BeautifulSoup对网站进行迭代并获取所有值?

2024-05-16 20:54:16 发布

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

这是我的HTML页面的一部分,我使用BeautifulSoup将其解析为变量。我需要提取一些文本值,然后将它们插入表中。 我需要球员的名字,球队和分数

我可以得到第一个玩家名,第二个玩家名使用next_sibling,但无法遍历整个页面

<h3>NBA Player Points</h3>
<br>

0089, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Murray J. (DEN)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.85, Over : 1.85, OU : 18.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

0761, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Rozier T. (CHA)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.75, Over : 1.95, OU : 18.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

1491, Thu Jan 16 03:00:00 CET 2020, DEN/CHA-Grant J. (DEN)
<ul>
<li>Player Points  [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Points [Under : 1.85, Over : 1.85, OU : 13.5]</li>
<li>Player Points [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Index Rating [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Assists [Under : 1.0, Over : 1.0, OU : 0.0]</li>
<li>Player Rebounds [Under : 1.0, Over : 1.0, OU : 0.0]</li>
</ul>

下面是我想从这个HTML中得到的:

玩家:Murray J

团队:DEN

玩家积分:18.5

玩家:Rozier T

团队:CHA

玩家积分:18.5

玩家:格兰特J

团队:DEN

玩家积分:13.5

有什么想法吗


Tags: index玩家ouliuljanpointsover
1条回答
网友
1楼 · 发布于 2024-05-16 20:54:16

这不是最优雅的代码,但它应该能让你达到目的。这里使用的主要字符串操作工具是partition()方法,它将一个字符串拆分为围绕分隔符的3个子字符串。然后使用strip()replace()方法从这些字符中去除不必要的字符

from bs4 import BeautifulSoup as bs
players = """[your html above]"""

soup = bs(players,'lxml')
names = soup.select('ul')
for name in names:
    dat = name.previous.strip().partition('-')[2]
    print('Name:',dat.partition('. ')[0]+'.')
    print('Team:',dat.partition('. ')[2].replace('(','').replace(')',''))
    print('Player Points:',name.select('li')[2].text.partition(', OU : ')[2].replace(']',''))

输出:

Name: Murray J.
Team: DEN
Player Points: 18.5
Name: Rozier T.
Team: CHA
Player Points: 18.5
Name: Grant J.
Team: DEN
Player Points: 13.5

相关问题 更多 >