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

Python爬虫抓取新蛋显卡页图片title报NoneType不可下标错误如何解决

问题排查与解答

错误原因

  • 你抓取的containers列表里不全是正常的商品卡片,新蛋分类页会插入广告位、运营推荐位、空占位模块等非商品元素,这些元素虽然也匹配div.item-container选择器,但内部DOM结构和正常商品不一样,有的缺失嵌套的div、a标签或者img节点,当循环执行到这类元素时,链式调用container.div.div.a.img中间某一步就会返回None,你再尝试取["title"]就会抛出NoneType不可取下标的错误。
  • 你在循环外只测试了第一个元素containers[0],刚好第一个位置是正常商品,DOM结构完整,所以能正常取值,但不代表列表里所有元素结构都一致。

解决方案

方案1:提前过滤无效容器

新蛋正常商品的item-container下都会有item-info类的节点,你可以在获取列表时直接过滤掉结构不完整的无效元素:

# 原获取containers的代码调整为:
containers = page_soup.findAll("div",{"class":"item-container"})
# 过滤无商品信息的无效容器
valid_containers = [c for c in containers if c.find("div", {"class":"item-info"}) is not None]
# 后续循环只遍历valid_containers即可

方案2:取值时增加空判断,避免硬编码链式调用

不要直接用连续的div.div.a这种强依赖结构的写法,改用find/select_one方法配合判断容错:

for container in containers:
    # 品牌取值容错
    brand = "未知品牌"
    img_node = container.select_one("div div a img")
    if img_node and img_node.has_attr("title"):
        brand = img_node["title"]
    
    # 其余字段也用相同逻辑容错,避免索引越界错误
    title_node = container.find("a", {"class":"item-title"})
    product_name = title_node.text.strip() if title_node else "未知商品名"
    
    ship_node = container.find("li", {"class":"price-ship"})
    shipping = ship_node.text.strip() if ship_node else "无配送信息"
    
    print(brand, product_name, shipping, sep="\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:02