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

Python爬虫抓取bewellstore.ro商品为何在第12张图片处停止

爬虫停止运行的原因及解决方案

核心原因

  • 反爬拦截:你所有requests.get()请求都没有携带浏览器请求头,且没有请求间隔,连续请求12次后触发站点频率限制,服务器直接拒绝响应或返回拦截页面,导致程序报错终止。
  • 无异常捕获逻辑:任意商品详情页存在缺失你定义的目标元素(比如部分商品没有woocommerce-product-details__short-description、sku等字段)时,find()方法会返回None,调用.text.strip()会直接抛出AttributeError导致程序终止。
  • 初始链接抓取不完整:首次请求商店首页时如果被反爬拦截,返回的页面内容不完整,会导致你一开始拿到的product_links就只有12条,遍历完自然停止。
  • 图片请求无超时/异常处理:请求第12张图片时如果出现网络波动、资源不存在等情况,无超时设置会导致程序永久卡住,无异常捕获会直接报错终止。

修复方案

1. 全局添加请求头

在代码开头定义统一的请求头,所有网络请求都携带该头信息,伪装成正常浏览器访问:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 所有requests.get都替换为这种形式,加header和超时设置
r = requests.get(url, headers=headers, timeout=10)

2. 增加元素查找异常捕获

所有字段提取都加判空或异常捕获,避免单个商品字段缺失导致整个程序崩溃:

# 示例字段提取写法
try:
    title = soup.find('h1', class_='product_title').text.strip()
except:
    title = ''
try:
    price = soup.find('p', class_ = 'price').text.strip()
except:
    price = ''
# 其余字段都按照该逻辑修改

3. 添加请求间隔

每次请求后增加1-2秒的延迟,避免触发站点频率限制:

import time
# 每次requests.get之后加
time.sleep(1.5)

4. 验证初始链接数量

先打印print(len(product_links))确认首次抓取的商品链接数量是否和站点实际商品数量一致,如果数量不对,说明首页请求就被拦截,优先调整请求头和间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:48:01