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

Python网页爬虫如何在条件不满足时返回nan/nil等缺省值

爬虫页面结构变化容错实现方案

你遇到的报错是IndexError: list index out of range,翻译为索引错误:列表下标超出范围,触发原因是页面结构变化后,class为value的div元素数量不足4个,直接通过[i]索引不存在的元素就会导致程序中断。

原代码还存在以下可优化问题:

  • 循环逻辑冗余:while + for嵌套会重复遍历链接,存在重复采集的问题
  • 变量名拼写错误:每次采集结束后重置的是rating,实际存储数据的列表是ratings,会导致旧数据堆积
  • 未处理网络请求异常、元素不存在等其他可能导致中断的场景

修改后可容错的代码

import requests
from bs4 import BeautifulSoup
import numpy as np # 用到nan需要导入numpy,也可以直接用None代替

def get_quality_rating_info(links):
    # 可选添加请求头模拟浏览器,降低反爬拦截概率
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    Quality_rating = []
    
    for link in links:
        print(f"Progress: Size of data collected {len(Quality_rating)}... {len(Quality_rating)}/{len(links)}")
        ratings = []
        try:
            # 捕获请求阶段异常
            product_url = requests.get(link, headers=headers, timeout=10)
            product_url.raise_for_status() # 自动触发4xx/5xx状态码异常
            new_soup = BeautifulSoup(product_url.text, "html.parser")
            value_divs = new_soup.findAll("div", {"class":"value"})
            # 先判断元素数量是否足够,避免索引越界
            if len(value_divs) >=4:
                for i in range(4):
                    quality = value_divs[i]
                    ratings.append(str(quality.text.strip()))
                Quality_rating.append(ratings[0])
            else:
                # 元素数量不足时插入nan
                Quality_rating.append(np.nan)
        except Exception as e:
            # 所有异常场景都插入nan,继续运行
            Quality_rating.append(np.nan)
    
    print("Successfully collected Quality rating data!")
    return Quality_rating

优化效果说明

  • 所有请求错误、页面结构不匹配、解析错误的场景都会自动返回nan,不会中断采集流程
  • 修复了原代码的循环逻辑和变量拼写问题,不会出现重复采集和数据堆积
  • 不需要nan的话可以把np.nan替换为None或者自定义的占位字符串比如"无数据"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:03