Scrapy使用yield导出JSON文件为空,求问题排查解决方法
问题原因及解决方案
你的代码存在两个关键错误,导致无法生成有效JSON文件:
1. parse 方法缩进错误,未作为类成员方法
在你的第一个代码中,parse 函数定义在 BooksSpider 类的外部,Scrapy无法识别该方法作为爬虫的解析入口,因此不会执行任何数据抓取逻辑。
2. 起始URL变量名拼写错误:star_urls → start_urls
Scrapy爬虫类中指定起始URL的固定变量名是start_urls,你拼写为star_urls,导致爬虫无法读取目标访问地址。
修正后的完整代码
import scrapy class BooksSpider(scrapy.Spider): name = "books" start_urls = [ "http://books.toscrape.com" ] def parse(self, response): titles = response.css("article.product_pod h3 a::attr(title)").getall() for title in titles: yield {"title": title}
验证说明
- 修正缩进后,
parse成为类的成员方法,Scrapy会在请求完成后自动调用它处理响应 - 修正
start_urls拼写后,爬虫能正确加载目标URL - 再次执行命令
scrapy crawl books -o books.json,即可得到包含书籍标题的JSON文件
内容的提问来源于stack exchange,提问作者Alexandre Nakicen
相关产品推荐
相关产品推荐

