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

Scrapy中scrapy.Request失效:爬虫抓取0页问题求助

问题分析与解决

问题场景

爬虫抓取页面数为0,改用yield scrapy.Request替代原有的Rule规则后出现异常。当前parse代码如下:

def parse(self, response):
        all_companies = response.xpath('//header[@class = "card-header"]')

        for company in all_companies:
            company_url = company.xpath('./a[@class = "card-header-scorecard"]/@href').extract_first()
            yield scrapy.Request(url=company_url, callback = self.parse_company)

已通过Scrapy Shell验证company_url能正常获取,原Rule规则可正常工作:

rules = (
    Rule(LinkExtractor(restrict_css=".card-header > a"), callback="parse_company")
)

可能的原因及解决方法

  • 爬虫类继承错误
    如果你的爬虫类仍然继承自CrawlSpider,框架会默认使用parse方法处理Rule规则,你自定义的parse方法不会被执行。解决方法是将继承类改为scrapy.Spider:

    from scrapy.spiders import Spider
    
    class YourSpider(Spider):
        name = "your_spider"
        # 其他配置...
    
  • URL为相对路径未处理
    LinkExtractor会自动将相对路径转换为绝对URL,但手动yield Request时需要自己处理。将company_url改为绝对路径:

    company_url = response.urljoin(company.xpath('./a[@class = "card-header-scorecard"]/@href').extract_first())
    
  • 检查日志排查问题
    开启Scrapy的DEBUG日志(设置LOG_LEVEL='DEBUG'),查看是否有请求被过滤、URL无效或回调函数未触发的相关信息,进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:20:27