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
相关产品推荐
相关产品推荐

