You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用BS4批量爬取Futbin.com多位球员数据并存储至DataFrame

批量爬取Futbin多位FIFA球员数据并保存到DataFrame的解决方案

问题背景

我之前手里有一份只能爬取单个Futbin球员数据的代码,但怎么改都没法适配批量爬取多位球员的需求。现在需要把这份代码改造一下,实现批量爬取指定球员列表的数据,最后保存到DataFrame里。原单个球员的爬取代码和目标爬取的球员URL列表如下:

原单个球员爬取代码:

import requests
import pandas as pd
from bs4 import BeautifulSoup
url = "https://www.futbin.com/21/player/541/lionel-messi"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
data = {}
for s in soup.select(".left_stat_name"):
    data[s.get_text(strip=True)] = s.find_next(class_="stat_val").get_text( strip=True )
print(pd.DataFrame([data]).T)

目标爬取的球员URL列表:

urls = ["https://www.futbin.com/21/player/541/lionel-messi", 
        'https://www.futbin.com/21/player/529/kylian-mbappe', 
        'https://www.futbin.com/21/player/542/cristiano-ronaldo']

简便的批量爬取实现方法

其实改造起来很简单,核心思路就是把单个球员的爬取逻辑封装成一个函数,然后遍历你的URL列表,逐个爬取数据并收集起来,最后统一转换成DataFrame就行。我还特意加上了球员名称的提取,让最终的表格数据更清晰:

import requests
import pandas as pd
from bs4 import BeautifulSoup

def scrape_player_data(url):
    # 发送请求并解析页面内容
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    
    # 从URL中提取球员名称(比从页面爬取更快捷)
    player_name = url.split("/")[-1].replace("-", " ").title()
    
    # 提取球员的各项数据
    data = {"Player Name": player_name}
    for s in soup.select(".left_stat_name"):
        stat_name = s.get_text(strip=True)
        stat_value = s.find_next(class_="stat_val").get_text(strip=True)
        data[stat_name] = stat_value
    
    return data

# 你的目标球员URL列表
urls = ["https://www.futbin.com/21/player/541/lionel-messi", 
        'https://www.futbin.com/21/player/529/kylian-mbappe', 
        'https://www.futbin.com/21/player/542/cristiano-ronaldo']

# 批量爬取所有球员的数据
all_players_data = [scrape_player_data(url) for url in urls]

# 把收集到的数据转换成DataFrame
df = pd.DataFrame(all_players_data)

# 打印查看结果(可选操作)
print(df)

# 如果需要保存到本地文件,可以用这行代码(可选操作)
# df.to_csv("fifa_players_stats.csv", index=False)

代码细节说明

  • 封装的scrape_player_data函数负责处理单个球员的爬取:发送请求、解析页面、提取名称和各项数据,最后返回一个包含该球员所有信息的字典。
  • 用列表推导式遍历URL列表,一次性收集所有球员的数据,写法简洁高效。
  • 把字典列表传给pd.DataFrame()后,自动生成规整的表格:每一行对应一个球员,每一列对应一项属性(比如速度、射门等)。
  • 最后还加上了可选的CSV保存功能,方便你后续做数据分析或者存档。

内容的提问来源于stack exchange,提问作者MLP99

火山引擎 最新活动