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

Scrapy爬虫运行无返回结果 parse_item未执行问题排查

问题诱因
  • 核心错误是类方法缩进不合法:你定义的parse、parse_items、parse_item三个方法全部顶格编写,没有缩进归入AstroSpider类的内部。Scrapy处理完初始请求后,会默认调用Spider类内部的parse方法作为入口回调,由于这个方法根本不在类中,初始响应没有任何逻辑处理,后续的页面跳转、数据解析链路完全不会触发,自然没有任何打印和输出结果。
  • 存在潜在的解析报错风险:代码里直接用getall()[0]、getall()[1]取下标取值,如果目标页面的CSS选择器没有匹配到足够的元素,会直接抛出索引越界异常,导致单个请求解析中断。
  • 调试打印不友好:直接用print输出内容很容易被Scrapy默认的运行日志覆盖,就算逻辑跑到了也可能看不到打印内容。
修复方案

修复后的完整可运行代码如下:

import scrapy

class AstroSpider(scrapy.Spider):
    name = "Astro"
    allowed_domains = ['www.astrolighting.com']
    start_urls = ['https://www.astrolighting.com/products']

    def parse(self, response, **kwargs):
        for link in response.css('article.product-listing-item a::attr(href)'):
            yield response.follow(link.get(), callback=self.parse_items)

    def parse_items(self, response):
        variant_links = response.css('div.variants.variants--large a::attr(href)')
        # 兼容无变体的单品页面,避免漏抓
        if not variant_links:
            yield from self.parse_item(response)
            return
        for link in variant_links:
            yield response.follow(link.get(), callback=self.parse_item)

    def parse_item(self, response):
        span_content = response.css('div.detail__right p span::text').getall()
        yield {
            'name': response.css('div.detail__right h1::text').get(default='').strip(),
            'material': span_content[0].strip() if len(span_content) >= 1 else '',
            'id': span_content[1].strip() if len(span_content) >= 2 else ''
        }

对应的修复点说明:

  • 所有回调方法统一缩进4个空格,归入AstroSpider类内部,保证Scrapy能正常找到初始回调parse,启动整个解析流程。
  • 增加选择器匹配容错:取值前先判断匹配到的内容长度,避免因为页面结构局部变动导致索引越界报错。
  • 增加页面结构兼容:如果进入的页面没有变体选项(本身就是最终详情页),直接调用详情解析逻辑,避免漏抓数据。
  • 调试时如果需要看打印内容,建议用Scrapy自带的self.logger.info("调试信息")代替原生print,不会被日志覆盖;也可以启动爬虫时加--nolog参数关闭默认日志,只看自定义输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:24:30