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

Python使用list.remove()删除列表元素提示x not in list报错

问题原因

list.remove(x): x not in list 报错的唯一触发条件,是调用remove方法的瞬间,列表内不存在和传入参数字符级完全相等的元素。你遇到的问题本质是三个认知偏差:

  • 你硬编码的待删除静态资源链接,和页面实际返回的img src并非完全一致:Steam的静态资源链接会动态拼接版本参数(比如你写死的logo_steam.svg?t=962016,后面的t值会随前端版本更新变化),部分CDN域名也可能根据访问地区切换,只要字符串有一个字符差异,全值匹配就会失败。
  • 你确认元素存在的依据不成立:你大概率是用浏览器打开页面看到了对应元素,但代码里的requests请求默认携带的User-Agent是python-requests/版本号,Steam识别到爬虫请求时会返回结构简化的页面,根本不会返回所有浏览器端能看到的静态资源,缺任意一个待删链接时,对应remove调用就会报错。
  • 就算你补了正常浏览器的请求头,Steam也会根据访问地区、账号登录状态、AB测试分组返回略有差异的DOM结构,无法保证每次请求都能拿到你列的全部10个静态资源链接。
修复方案

不要硬编码全链接做精确匹配删除,改用关键词过滤逻辑,从根源上避免匹配失败、元素缺失导致的报错:

  • 先把所有要排除的无关资源的唯一特征关键词列出来,不用写全路径、不用管动态拼接的参数
  • 遍历图片链接的时候直接过滤掉命中排除关键词的链接,省去先全量收集再逐个删除的步骤
  • 如果一定要保留先收集后删除的逻辑,每次调用remove前必须先判断元素是否存在于列表中,禁止直接调用remove

修正后可直接运行的代码

import requests
from bs4 import BeautifulSoup

def GRS():
    rust_skins_url = 'https://store.steampowered.com/itemstore/252490/browse/?filter=Limited'
    # 配置正常浏览器的请求头,避免被反爬返回简化页面
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
    }
    # 定义要排除的无关资源关键词,无需写全路径
    exclude_keywords = [
        'blank.gif',
        'footerLogo_valve_new.png',
        'ico_facebook.gif',
        'ico_twitter.gif',
        'throbber.gif',
        'logo_steam.svg',
        'header_menu_hamburger.png',
        'logo_steam_footer.png',
        'header_logo.png',
        'logo_valve_footer.png'
    ]
    TWS = []
    r = requests.get(rust_skins_url, headers=headers, timeout=10)
    soup = BeautifulSoup(r.text, 'html.parser')
    images = soup.find_all('img')
    for image in images:
        src = image.get('src', '')
        # 链接不包含任何排除关键词时,才加入结果列表
        if not any(keyword in src for keyword in exclude_keywords):
            TWS.append(src)
    return TWS

Skins = GRS()
print(Skins)

如果你坚持要使用先收集全量链接再逐个删除的写法,必须给每个remove操作加存在性判断,示例写法:

target = 'https://store.cloudflare.steamstatic.com/public/images/blank.gif'
if target in TWS:
    TWS.remove(target)

注意这种写法依然解决不了硬编码全链接无法匹配动态参数的问题,优先使用关键词过滤的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:42:25