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

Scrapy CrawlSpider仅爬取4条数据问题排查求助

问题分析与解决方案

你的爬虫仅输出4条数据,核心原因集中在链接爬取逻辑、反爬应对以及内容提取逻辑这几个方面:

1. 链接提取规则存在缺陷

当前规则Rule(LinkExtractor(allow='detail'), callback='parse_item', follow=True)有两个关键问题:

  • 匹配范围混乱:所有包含"detail"字符串的链接都会被抓取,其中混杂了大量非产品页的无效链接
  • 缺失中间页面爬取:首页直接指向产品详情页的链接极少,网站的产品大多嵌套在分类页、列表页之后,你的规则没有跟进这些中间页面,自然无法获取到大量产品链接

2. 未适配网站反爬策略

O'Reilly Auto网站大概率有反爬机制:

  • 会校验请求的User-Agent,Scrapy默认UA容易被识别拦截
  • 存在请求频率限制,短时间大量请求会被限制访问
  • 部分产品列表依赖JavaScript动态加载,Scrapy默认无法解析这类内容

3. 详情页内容提取逻辑单一

你使用的CSS选择器div.pdp-header.product-name-wrap h1::text仅适配了部分产品页的结构,部分产品的名称可能用了不同的HTML标签,导致这部分数据被过滤。


修正后的代码示例

import scrapy
from scrapy.spiders import CrawlSpider, Rule    
from scrapy.linkextractors import LinkExtractor

class ProductspiderSpider(CrawlSpider):
    name = "productspider"
    allowed_domains = ["oreillyauto.com"]
    start_urls = ["https://www.oreillyauto.com/"]
    
    # 配置反爬相关参数
    custom_settings = {
        'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'DOWNLOAD_DELAY': 2,  # 设置请求延迟,降低被封风险
        'COOKIES_ENABLED': True,
        'LOG_LEVEL': 'DEBUG'  # 开启调试日志,方便排查问题
    }

    rules = (
        # 跟进分类页链接,遍历所有产品分类
        Rule(LinkExtractor(allow=r'/category/|/shop-by-category/'), follow=True),
        # 跟进搜索/列表页链接,获取分页内的产品链接
        Rule(LinkExtractor(allow=r'/search/|/results/'), follow=True),
        # 精准匹配产品详情页,调用解析函数,不跟进详情页内的无关链接
        Rule(LinkExtractor(allow=r'/detail/[\w-]+/'), callback='parse_item', follow=False),
    )

    def parse_item(self, response):
        if response.status == 404:
            self.logger.warning(f'Page not found: {response.url}')
            return
        
        # 增加备选选择器,覆盖更多产品页结构
        name = response.css('div.pdp-header.product-name-wrap h1::text').get() or \
               response.css('h1.product-name::text').get()
        
        if name:
            yield {'name': name.strip(), 'product_url': response.url}
        else:
            self.logger.warning(f'No product name found at: {response.url}')

额外调试建议

  • 使用scrapy shell https://www.oreillyauto.com/测试链接提取器,确认LinkExtractor能正确抓取分类、列表页链接
  • 如果网站有大量JS动态加载内容,可配合scrapy-playwright渲染页面
  • 查看Scrapy调试日志,检查是否存在请求被拦截、链接未匹配等异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:54