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

Scrapy爬虫无法将数据保存至jsonlines文件问题求助

问题分析与解决方案

你的爬虫日志显示已成功抓取数据,但JSON Lines文件始终为空,且FEED_EXPORT_BATCH_ITEM_COUNT配置不生效,核心原因是**JOBDIR持久化配置的影响**,结合细节调整,具体解决步骤如下:

1. 临时关闭JOBDIR(优先测试)

当启用JOBDIR开启爬虫持久化时,Scrapy会将抓取的Item临时缓存到持久化目录中,不会实时写入Feed文件,即使配置了FEED_EXPORT_BATCH_ITEM_COUNT也会被忽略。只有当爬虫正常结束(非强制中断)时,才会一次性写入所有缓存的Item。

测试时先注释掉custom_settings中的JOBDIR配置:

custom_settings = {
    'ROBOTSTXT_OBEY': False,
    'DOWNLOAD_DELAY': 2,
    'FEEDS': {'medscape_links.jsonl': {'format': 'jsonlines',}},
    'FEED_EXPORT_BATCH_ITEM_COUNT': 10,
    # 'JOBDIR': 'crawl_state',  # 注释该行
}

重新运行爬虫,观察是否能生成包含数据的JSON Lines文件。

2. 优化FEEDS配置(避免潜在写入问题)

补充显式参数完善写入逻辑,避免增量或编码问题:

'FEEDS': {
    'medscape_links.jsonl': {
        'format': 'jsonlines',
        'encoding': 'utf-8',
        'overwrite': True,  # 覆盖已有文件,避免增量写入混淆
        'store_empty': False,  # 无数据时不生成空文件
    },
}

3. 确保爬虫正常结束(若需保留JOBDIR)

如果必须使用JOBDIR持久化,不要强制终止爬虫(如Ctrl+C),需让爬虫自然结束。可以添加配置限制爬取数量,测试写入逻辑:

custom_settings = {
    # ... 其他配置
    'CLOSESPIDER_ITEMCOUNT': 50,  # 抓取50个Item后自动停止
    'JOBDIR': 'crawl_state',
}

4. 排查Item过滤问题

虽然日志显示Scraped from <200 ...>,仍需确认是否有自定义中间件过滤了Item。临时关闭所有自定义中间件,仅保留Scrapy默认组件,测试是否能正常写入。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:20