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

Python使用bs4爬取eBay商品仅能获取前4页,后续页无数据如何解决

eBay爬虫前4页正常、第5页无返回结果解决方案

问题根因

该问题由eBay的反爬拦截机制导致:

  • 前4页搜索结果对未认证的请求放行,从第5页开始,eBay会校验请求的会话连贯性、User-Agent有效性、请求频率,不符合条件的请求会被重定向到人机验证页面,返回的页面里没有商品列表节点,所以拿到的products是空列表。
  • 你使用的Chrome 53版本UA是2016年的旧版本,已经被eBay标记为可疑爬虫UA,前几页没拦截,多页请求后就会触发拦截。
  • 你每次请求都新建独立请求,没有复用前序请求生成的会话cookie,无法通过eBay的多页访问校验。
  • 设置过短的timeout参数(你用的2秒)会因为eBay对可疑请求故意拉长响应时间导致超时,不设置的话就会一直等待响应进入死循环。

修复方案

  • 使用requests.Session()复用会话,自动存储和携带eBay返回的cookie,模拟真实用户连续浏览多页的行为
  • 升级User-Agent为当前主流浏览器版本,补充常规请求头,降低被识别为爬虫的概率
  • 两次请求之间增加1-3秒的随机延迟,控制请求频率避免触发限流
  • 请求后先校验响应状态码和页面内容,确认没有触发验证后再解析商品

修复后代码示例

import requests
from bs4 import BeautifulSoup
import time
import random

search_term = 'gtx+1050ti'
page_num = 1
# 初始化会话,自动复用Cookie和连接
session = requests.Session()
# 更新为当前主流浏览器的请求头
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Referer': 'https://www.ebay.com/'
}
session.headers.update(headers)

while True:
    url = f'https://www.ebay.com/sch/i.html?_nkw={search_term}&_fcid=164&_sop=15&_pgn={page_num}'
    # 超时时间设置为10秒,避免被故意拉长的响应卡断
    page = session.get(url, timeout=10)
    # 校验是否触发人机验证
    if 'verify your identity' in page.text.lower():
        print("触发eBay人机验证,需更换IP或添加账号Cookie后重试")
        break
    
    soup = BeautifulSoup(page.text, 'lxml')
    products = soup.find_all('li', class_='s-item')
    print(f"第{page_num}页获取到{len(products)}个商品")
    if not products:
        break
    page_num += 1
    # 增加随机延迟,降低请求频率
    time.sleep(random.uniform(1,3))

内容的提问来源于stack exchange,提问作者André Clérigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:05