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

使用Python爬取网页中大学运动员NIL数据表格的问题

爬取大学运动员NIL数据的问题与解决方案

需求说明

需要从目标网站爬取每位运动员的以下信息,并整理为Pandas DataFrame:

  • 运动员姓名
  • 赞助商列表(若有多个赞助商,姓名、院校、项目需与每个赞助商对应成行)
  • 所属院校
  • 运动项目

原代码问题

原代码存在多处逻辑错误,导致无法正确提取数据:

  • 函数scrapeDeals的参数url未被使用,直接调用全局变量urlopen_req
  • pd.read_html的调用无实际作用,未正确处理表格结构
  • 遍历表格行时未跳过表头,会导致提取表头文本时出错
  • 提取赞助商的逻辑错误,重复添加同一赞助商且未拆分多赞助商条目
  • 未实现院校和项目信息的提取逻辑

修正后的完整代码

import pandas as pd
import requests
from bs4 import BeautifulSoup

# 请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
}

def scrape_nil_data():
    # 获取页面内容
    url = "https://nilcollegeathletes.com/athletes"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 定位目标表格
    table = soup.find('table')
    if not table:
        print("未找到目标表格")
        return pd.DataFrame()
    
    # 初始化数据存储列表
    nil_data = []
    
    # 遍历表格行,跳过表头行
    rows = table.find_all('tr')[1:]
    for row in rows:
        cols = row.find_all('td')
        if len(cols) < 4:  # 跳过列数不足的异常行
            continue
        
        # 提取基础信息
        athlete_name = cols[0].get_text(strip=True)
        college = cols[2].get_text(strip=True)
        sport = cols[3].get_text(strip=True)
        
        # 提取赞助商列表
        sponsor_col = cols[1]
        sponsors = sponsor_col.find_all('li')
        if sponsors:
            # 每个赞助商对应一行数据
            for sponsor in sponsors:
                sponsor_name = sponsor.get_text(strip=True)
                nil_data.append({
                    '姓名': athlete_name,
                    '赞助商': sponsor_name,
                    '所属院校': college,
                    '运动项目': sport
                })
        else:
            # 处理无赞助商的情况
            nil_data.append({
                '姓名': athlete_name,
                '赞助商': None,
                '所属院校': college,
                '运动项目': sport
            })
    
    # 转换为DataFrame
    df = pd.DataFrame(nil_data)
    return df

# 执行爬取并输出结果
if __name__ == "__main__":
    result_df = scrape_nil_data()
    print(result_df.head())
    # 可选:保存数据到CSV文件
    # result_df.to_csv('nil_athlete_data.csv', index=False, encoding='utf-8-sig')

代码说明

  1. 请求处理:使用requests带上合法User-Agent获取页面,避免被反爬拦截
  2. 表格定位:通过BeautifulSoup定位目标表格,直接跳过表头行处理数据
  3. 信息提取:按列依次提取姓名、院校、项目,再拆分赞助商列的多个条目
  4. 数据结构化:将每个赞助商与运动员基础信息一一对应,生成符合要求的行数据
  5. 异常处理:跳过列数不足的异常行,处理无赞助商的边界情况,避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:31