如何抓取 NBA 首发阵容并创建 Pandas DataFrame?

问题描述 投票:0回答:2

我在解析 NBA 首发阵容的代码时遇到困难,如果可能的话希望得到一些帮助。

这是迄今为止我的代码:

import requests
from bs4 import BeautifulSoup

url = "https://www.rotowire.com/basketball/nba-lineups.php"
soup = BeautifulSoup(requests.get(url).text, "html.parser")

lineups = soup.find_all(class_='lineup__player')
print(lineups)

我正在寻找以下数据:

  1. 玩家

  2. 团队

  3. 位置

我希望抓取数据,然后从输出创建一个 Pandas Dataframe。

这是我想要的输出的示例:

    Player        Team   Position
Dennis Schroder    BOS      PG
Robert Langford    BOS      SG
Jayson Tatum       BOS      SF
Jabari Parker      BOS      PF
Grant Williams     BOS      C

    Player        Team    Postion
Kyle Lowry         MIA      PG
Duncan Robinson    MIA      SG
Jimmy Butler       MIA      SF
P.J.Tucker         MIA      PF
Bam Adebayo        MIA      C

...                ...      ...

我能够找到播放器数据,但无法成功解析它。我可以看到位于“标题”内的玩家数据。

任何有关如何完成此项目的提示将不胜感激。预先感谢您提供的任何帮助。

我只是寻找5名首发球员...不需要添加替补球员。并且不确定是否有某种方法可以在每个团队之间添加空格,就像我上面的输出一样。

这是我想解析的当前输出的示例:

 
[<li class="lineup__player is-pct-play-100" title="Very Likely To Play">
<div class="lineup__pos">PG</div>
<a href="/basketball/player.php?id=3444" title="Dennis Schroder">D. Schroder</a>
</li>, <li class="lineup__player is-pct-play-100" title="Very Likely To Play">
<div class="lineup__pos">SG</div>
<a href="/basketball/player.php?id=4762" title="Romeo Langford">R.

python pandas web-scraping beautifulsoup python-requests
2个回答
3
投票

您走在正确的道路上。这是一种方法。

import requests, pandas
from bs4 import BeautifulSoup

url = "https://www.rotowire.com/basketball/nba-lineups.php"
soup = BeautifulSoup(requests.get(url).text, "html.parser")

lineups = soup.find_all(class_='is-pct-play-100')
positions = [x.find('div').text for x in lineups]
names = [x.find('a')['title'] for x in lineups]
teams = sum([[x.text] * 5 for x in soup.find_all(class_='lineup__abbr')], [])

df = pandas.DataFrame(zip(names, teams, positions))
print(df)

0
投票

问题。有谁知道如何将这些阵容分类为适当的对决并为其创建不同的表格吗?也许还可以为这些球队比赛添加主/客栏

© www.soinside.com 2019 - 2024. All rights reserved.