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

Scrapy无法解析数据导致导出JSON文件为空问题求助

Scrapy JSON输出为空问题修复方案

核心问题原因

  • yield语法错误:你的parse方法中yield单独占一行,Python会将其识别为返回空值(None),后面的字典属于独立的无效代码块,从未被提交给Scrapy框架,因此没有数据写入JSON文件。
  • 可选优化:若选择器匹配不到内容时调用str.strip()会抛出异常,建议给get()方法加默认空值兜底。

修复后的完整代码

import scrapy
from scrapy.crawler import CrawlerProcess


class SoccerwaySpider(scrapy.Spider):
    name="Soccerway"
    start_urls = ['https://fr.soccerway.com/teams/france/olympique-de-marseille/890/']

    def start_requests(self):
        headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
        for url in self.start_urls:
            yield scrapy.Request(url, headers=headers, callback=self.parse)

    def parse(self,response):
        # 修正yield写法,将字典和yield写在一起,也可以用括号包裹换行的字典
        yield {
            'score': str.strip(response.css("table.matches").css('td.score-time.score').css('a::text').get(default='')),
        }

process = CrawlerProcess(settings={
    "FEEDS": {
        "Soccerway.json": {"format": "json"},
    },
})
process.crawl(SoccerwaySpider)
process.start()

后续排查建议

如果修改后仍然没有数据,可以在parse方法中加入打印语句验证选择器是否有效:

print("匹配到的比分内容:", response.css("table.matches td.score-time.score a::text").get())

如果打印结果为None,说明当前CSS选择器和页面实际结构不匹配,需要重新调整选择器规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:06:00