如何将爬取的球员数据导入Pandas三列DataFrame并添加国家字段
解决爬取海外球员数据并规整到Pandas DataFrame的问题
你的核心问题是没有按行维度提取球员数据,直接抓取所有<td>会把所有数据揉成一维列表,无法对应到DataFrame的行和列。下面是修正后的完整代码,同时添加国家字段:
from bs4 import BeautifulSoup import requests import pandas as pd # 1. 请求页面并解析 url = 'https://ng.soccerway.com/players/players_abroad/nigeria/' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'} req = requests.get(url, headers=headers) # 用html.parser解析,避免解析异常 soup = BeautifulSoup(req.text, 'html.parser') # 2. 定位目标表格(页面中只有一个符合类名的表格,取第一个) target_table = soup.find('table', class_="playersabroad table") # 3. 构造球员数据列表 player_records = [] # 遍历表格的每一行(跳过表头行,表头是<th>,数据行是<td>) for row in target_table.find_all('tr')[1:]: # 提取当前行的所有td文本 cols = [col.text.strip() for col in row.find_all('td')] # cols的结构是[姓名, 联赛, 球队],添加国家字段(这里固定为Nigeria) cols.append('Nigeria') player_records.append(cols) # 4. 创建DataFrame df = pd.DataFrame(player_records, columns=['player-name', 'League', 'team_name', 'Country']) # 查看结果 print(df.head())
关键修正点说明:
- 解析器替换:把原代码的
'html'换成'html.parser',避免BeautifulSoup解析时的兼容性问题 - 按行提取数据:先定位表格,再遍历每一行数据,确保每个球员的信息是一组独立的列表元素
- 添加国家字段:因为页面是尼日利亚海外球员列表,直接给每条记录追加
'Nigeria'即可 - 跳过表头行:表格的第一行是表头(包含
<th>),所以用[1:]跳过,只处理数据行
运行代码后,你会得到一个结构规整的DataFrame,包含player-name、League、team_name和Country四列,每条行对应一个球员的完整信息。
内容的提问来源于stack exchange,提问作者wole
相关产品推荐
相关产品推荐

