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

Python提取列表指定元素及Web爬取球员姓名与位置问题

解决方案:从扁平球员列表提取姓名和位置并存入模型

核心思路

你的原始列表是每4个元素对应一位球员(号码、姓名、家乡、位置),所以只需要按4个元素为一组,提取每组的第2位(姓名)和第4位(位置)即可,不用复杂的间隔计数。


方法一:分组处理(最直观不易出错)

如果已经得到了扁平的my_list,直接按4个元素分组提取:

my_list = [1, 'Bob', 'Austin', 'Pitcher', 2, 'Jim', 'New York', 'Catcher', ...]

# 提取姓名和位置到新列表
result_list = []
for i in range(0, len(my_list), 4):
    # 避免列表末尾元素不足4个的情况
    if i + 3 < len(my_list):
        name = my_list[i + 1]
        position = my_list[i + 3]
        result_list.extend([name, position])
        # 直接存入Player模型
        Player.objects.create(name=name, position=position)

方法二:枚举索引判断

利用枚举获取元素索引,筛选出每组中对应姓名(索引%41)和位置(索引%43)的元素:

result_list = []
for idx, item in enumerate(my_list):
    if idx % 4 == 1 or idx % 4 == 3:
        result_list.append(item)
        # 当遍历到位置时,同步存入模型(姓名是当前索引减2的元素)
        if idx % 4 == 3:
            Player.objects.create(name=my_list[idx-2], position=item)

优化建议:爬取时直接提取目标字段

与其先把所有字段存入扁平列表再处理,不如在爬取阶段就直接提取姓名和位置,减少中间步骤:

import requests
from bs4 import BeautifulSoup

# 遍历联盟球队页面(示例代码)
team_urls = ["球队URL1", "球队URL2", ...]
for url in team_urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 假设页面中每个球员对应一个.player-card元素
    player_cards = soup.find_all("div", class_="player-card")
    for card in player_cards:
        # 直接提取姓名和位置
        name = card.find("span", class_="player-name").text.strip()
        position = card.find("span", class_="player-position").text.strip()
        # 直接存入模型
        Player.objects.create(name=name, position=position)

为什么你之前的计数判断失败?

你提到的“第2个、第6个及之后每间隔7个”是错误的规律——实际每组是4个元素,下一个姓名的位置是2+4=6,下一个位置是4+4=8,间隔是4而非7,这才是导致计数判断失效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:05:48