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

Scrapy编写的eBay爬虫爬取5页后停止的问题求助

问题原因

你的爬虫爬满5页就停止,是代码bug加平台访问限制共同导致的:

  • Item实例初始化位置错误:你把EbaySold()的实例写在了商品循环外部,循环过程中反复修改同一个对象的属性,不仅会导致导出数据重复错乱,还容易因空值触发异常中断请求调度
  • 下一页逻辑存在硬伤:a[type=next]选择器无法匹配eBay实际的下一页按钮,且直接调用.attrib['href']在匹配不到元素时会直接抛出异常,不会走到你写的if next_page is not None判断分支
  • 反爬触发+平台访客限制:Scrapy默认请求头不带真实浏览器标识、请求间隔过短会触发eBay反爬,返回验证码/空页面;同时eBay对未登录访客仅展示已售商品列表的前5页内容,超过5页会强制跳转验证,自然拿不到后续分页链接
修复方案

代码逻辑修正

  1. 把Item实例的初始化移到商品遍历循环内部,每个商品单独生成独立Item对象,避免数据污染
  2. 修正下一页按钮的CSS选择器,先判断元素存在再提取链接,不要直接硬取属性触发报错
  3. 给所有字段提取增加非空判断,避免页面局部结构变动时空值调用方法抛异常
  4. 增加基础反爬配置,设置合理的请求延迟、真实浏览器UA,降低被拦截概率

修复后完整代码

import scrapy
from myproject.items import EbaySold


class EbaySpider(scrapy.Spider):
    name = 'EbaySold'
    allowed_domains = ['www.ebay.com']
    # 基础反爬配置
    custom_settings = {
        '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',
        'DOWNLOAD_DELAY': 2.5,
        'CONCURRENT_REQUESTS': 1
    }
    start_urls = ['https://www.ebay.com/b/Apple-Unlocked-Smartphones/9355/bn_599372?LH_Sold=1&mag=1&rt=nc&_dmd=1&_pgn=1&_sop=13']

    def parse(self, response):
        products = response.css('li.s-item')

        for product in products:
            product_item = EbaySold()
            product_item['name'] = product.css('h3.s-item__title::text').get()
            if not product_item['name']:
                product_item['name'] = product.css('span.BOLD::text').get()
            product_item['sold_price'] = product.css('span.POSITIVE::text').get()
            date_tag = product.css('div.s-item__title-tag::text').get()
            if date_tag:
                product_item['date_sold'] = date_tag.replace('SOLD ', '')
            yield product_item

        # 修正后的下一页提取逻辑
        next_page = response.css('a.pagination__next::attr(href)').get()
        if next_page:
            yield response.follow(next_page, callback=self.parse)
注意事项
  • 未携带有效登录Cookie的情况下,eBay最多只给访客展示前5页已售商品数据,这是平台侧的访问限制,不是代码问题。如果需要爬取20页内容,需要在请求中加入你自己eBay账号登录后的有效Cookie
  • 不要随意调低请求延迟,否则会被平台临时封禁IP,返回403或验证码页面导致爬虫中断
  • 爬取eBay数据请遵守平台robots协议及相关使用条款

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:15:45