You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup的find_all方法爬取sofifa网站返回空列表如何解决

爬虫抓取sofifa球员数据解决方案

错误原因排查

  • soup.find_all()传参不符合语法规范:该方法第一个参数需传入要查找的HTML标签名,类名需通过class_关键字参数传入,直接传入带尖括号的标签字符串属于语法错误,必然返回空列表
  • 缺少请求头触发反爬:目标网站会校验请求头的User-Agent字段,无该字段的请求会被拦截,返回的页面不含球员列表数据
  • 元素定位规则不精准:你选中的bp3-text-overflow-ellipsis类全站多处使用,无法准确定位到需要的球员相关字段

正确实现代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 配置请求头模拟浏览器访问,绕过基础反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://sofifa.com/players?offset=0"
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.content, 'lxml')

player_list = []
# 定位球员列表的每一行数据
rows = soup.find_all('tr', class_="list")
for row in rows:
    # 提取姓名
    name_tag = row.find('div', class_="bp3-text-overflow-ellipsis")
    name = name_tag.text.strip() if name_tag else ""
    # 提取年龄
    age_td = row.find('td', class_="col col-ae")
    age = age_td.text.strip() if age_td else ""
    # 提取所属球队
    team_tag = row.find('div', class_="bp3-text-overflow-ellipsis subtitle")
    team = team_tag.text.strip() if team_tag else ""
    
    player_list.append({
        "球员姓名": name,
        "年龄": age,
        "所属球队": team
    })

# 打印结果,也可以取消下方注释导出为csv文件
df = pd.DataFrame(player_list)
print(df)
# df.to_csv("sofifa球员数据.csv", index=False, encoding="utf_8_sig")

关键语法说明

  • find_all('标签名', class_="类名")是BeautifulSoup定位指定类名元素的标准写法,不要直接传入带尖括号的HTML片段作为参数
  • 针对有反爬的网站,请求时添加User-Agent请求头是基础操作,可直接从浏览器开发者工具的网络请求中复制你当前浏览器的UA值使用
  • 定位元素前可先打印resp.text确认返回的页面内容是否和浏览器访问的页面一致,避免被反爬拦截后找不到元素的问题

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:36:07