gpt4 book ai didi

python - 在 BS4 中对多个容器使用循环时,如何从容器中提取多行?

转载 作者:行者123 更新时间:2023-12-01 08:28:52 24 4
gpt4 key购买 nike

我正在尝试抓取http://www.rotoworld.com/teams/injuries/nba/all/了解当前 NBA 伤病数据。我编写了一个 python 脚本(如下),它正确地提取团队和每个团队容器的第一行数据,但不是每个容器的所有玩家。我对Python很陌生,但花了很多时间试图找到解决方案,但不幸的是没有找到任何解决问题的方法。我希望这不是一个太新手的问题!

有人可以帮我提取每个球队的所有球员数据吗?

此外,如果有任何关于改进我的脚本的其他建议,请告诉我!我很高兴终于开始使用 Python 工作!

提前谢谢您!

import requests
from bs4 import BeautifulSoup as bs


#Define URL to fetch
url = 'http://www.rotoworld.com/teams/injuries/nba/all/'

#Make requests
data = requests.get(url)

# To force American English (en-US) when necessary
headers = {"Accept-Language": "en-US, en;q=0.5"}

#Create BeautifulSoup object
soup = bs(data.text, 'html.parser')

# Lists to store scraped data
teams = []
players = []
reports = []
return_dates = []
injury_dates = []
injuries = []
positions = []
statuses = []

# Extract data from individual containers

for container in team_containers:

# Team Name
team = container.a.text
teams.append(team)

# Player Name [First, Last]
player = container.table.a.text
players.append(player)

# Player Report
report = container.find('div', attrs = { 'class':'report'}).text
reports.append(report)

# Player Return
return_date = container.find('div', attrs = { 'class':'impact'}).text
return_dates.append(return_date)

# Player Injury Dates
injury_date = container.find('div', attrs = { 'class':'date'}).text
injury_dates.append(injury_date)

# Player Injury Details
injury = container.find('div', attrs = { 'class':'playercard'}).span.text
injuries.append(injury)

# Player Position
position= container.table.find_all('td')[9].text
positions.append(position)

# Player Status
status = container.table.find_all('td')[10].text
statuses.append(status)

import pandas as pd

test_df = pd.DataFrame({'team': teams,
'player': players,
'report': reports,
'return_date': return_dates,
'injury_date': injury_dates,
'injury': injuries,
'position': positions,
'status': statuses})
print(test_df.info())
test_df

当前结果:* 27 个容器 - 每队一个(如果球队受伤人数超过 1 人),包含球队表中的第一位球员* 记录姓名、报告、POS、日期、伤害、返回字段

预期结果:* 27 个容器 - 每队一个(如果球队受伤人数超过 1 人),包含球队表中的所有球员* 姓名、报告、POS、日期、伤害、返回作为标题行和字段记录

最佳答案

下面的代码选择第一个元素

player = container.table.a.text

你需要循环来获取所有玩家

# Player Name [First, Last]
for player in container.select('table a'):
if player.text: # skip "a img"
players.append(player.text)

关于python - 在 BS4 中对多个容器使用循环时,如何从容器中提取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54033159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com