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

Python网页爬虫无法检测站点新增商品问题及优化求助

爬虫问题修复与优化方案

1. 新增商品无法自动检测问题修复

问题原因

timed_pid 字典仅在脚本启动时一次性从初始商品列表生成,后续循环过程中虽然每次都会调用liens()拉取最新商品列表,但从未将新出现的商品链接加入到timed_pid遍历队列中,导致新增商品永远不会被检测。

修复方法

每次拉取最新商品列表后,同步新增链接到检测队列,修改循环内的代码如下:

prix = 400
wait_time = 259200
timed_pid = {p: 0 for p in liens()} 
# 新增x变量初始化,修复原代码未定义变量报错问题
x = 0

while True:
    try:
        # 仅请求1次列表页,保存结果复用,避免重复请求
        latest_urls = liens()
        a += 1
        print(f"请求次数:{x}")
        x += 1
        nombre_total_liens = len(latest_urls)
        print(f'找到的商品链接总数:{nombre_total_liens}')
        # 同步新增商品到检测队列
        for url in latest_urls:
            if url not in timed_pid:
                timed_pid[url] = 0
    except Exception as e:
        print("服务器拒绝连接..")
        print("等待5秒后重试")
        print("休眠中...")
        time.sleep(5)
        print("休眠结束,继续运行")
        continue

    time.sleep(15)
    # 后续遍历商品详情页的逻辑保持不变即可

2. 运行效率优化建议

  • 减少重复请求:原代码单次循环内调用3次liens()发起3次重复的列表页请求,修改为1次请求后复用结果,可减少2/3的列表页请求量,降低被站点反爬封禁的概率,同时提升运行速度。
  • 合理设置超时:将timeout=None修改为timeout=15,避免请求无响应导致脚本僵死。
  • 解析逻辑优化:价格提取改用正则匹配数字部分,替换原有的多次replace操作,逻辑更简洁、容错性更高。
  • 并发请求优化:商品详情页当前为串行请求,商品数量较多时检测速度慢,可以引入concurrent.futures.ThreadPoolExecutor实现多线程并发请求,可提升数倍检测速度。
  • 冗余代码清理:删除重复导入的datetime模块,移除无意义的response = url初始化赋值操作。
  • 异常捕获优化:尽量捕获具体异常类型而非全量捕获except:,避免屏蔽代码本身的语法、逻辑错误,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:03