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
相关产品推荐
相关产品推荐

