首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python抓取NFL.com梦幻足球投影

使用Python抓取NFL.com梦幻足球投影
EN

Stack Overflow用户
提问于 2018-08-10 19:34:54
回答 1查看 812关注 0票数 1

我希望使用Python的Beautiful Soup和requests库将http://fantasy.nfl.com/research/projections上的数据收集到一个简单的熊猫数据框架中。我使用了以下代码:

代码语言:javascript
复制
a = "http://fantasy.nfl.com/research/projections"
req = requests.get(a)
soup = bs4.BeautifulSoup(req.text,"html.parser")

我的目标是逐周收集每个职位的数据。然而,从这里返回的数据是2018赛季的总数。似乎没有任何分裂。如果选择了Week 1选项(例如),我如何将其拆分,以使我抓取的数据与显示的数据相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-11 00:22:36

您可以通过解析分页部分中的URL来很容易地做到这一点。

您可以看到它们具有端点statWeek=。我们只需输入我们想要的一周,并从该页面获得结果。这是一个示例脚本,它获取了玩家的名字,幻想点数(projected?)和前25周的周数,并将其保存在Pandas数据帧中。

代码语言:javascript
复制
def get_weekly_players(res):
    res_list = list() 
    week = url.split('statWeek=')[1]
    player_rows = res.find_all('tr')
    for row in player_rows:
        name = row.find('a', 'playerCard')
        points = row.find('td', 'stat_30')
        if name and points:
            res_list.append((name.text, float(points.text), int(week)))
    return res_list       

我们定义一个函数来从解析的HTML中提取所需的信息。

然后,我们简单地循环周数并将元组结果扩展到一个列表中。

代码语言:javascript
复制
all_res = list()
for week in range(0, 25):
    url = '''http://fantasy.nfl.com/research/projections?position=O&sort=projectedPts&statCategory=projectedStats&statSeason=2018&statType=weekProjectedStats&statWeek={}'''.format(week)
    req = requests.get(url)
    soup = BeautifulSoup(req.text,"html.parser")
    res = get_weekly_players(soup)
    all_res.extend(res)

然后,我们可以将结果传递给Pandas dataframe构造函数,我们就完成了。

代码语言:javascript
复制
player_df = pd.DataFrame(all_res, columns=['player', 'points', 'week'])

你可以看到我们已经得到了所有25周的结果。

代码语言:javascript
复制
player_df.describe()
          points      week
count   625.00000   625.000000
mean    3.22840     12.000000
std     0.37989     7.216878
min     2.14000     0.000000
25%     3.17000     6.000000
50%     3.30000     12.000000
75%     3.40000     18.000000
max     3.66000     24.000000
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51785640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档