这是我的 HTML 页面的一部分,我使用 Beautiful Soup 将其解析为变量。我需要提取一些文本值并稍后将它们插入到表中。 我需要球员的姓名、球队和积分。
我可以使用 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 中获得的内容:
球员:穆雷·J.
团队:DEN
玩家积分:18.5
球员:罗齐尔·T。
团队:CHA
玩家积分:18.5
玩家:格兰特·J.
团队:DEN
玩家积分:13.5
有什么想法吗?
最佳答案
不是最优雅的代码,但它应该可以帮助您实现目标。这里使用的主要字符串操作工具是 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
关于python - 如何使用 beautiful soup 来抓取网站来迭代并获取所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59762032/