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

如何在Python3脚本内直接运行Scrapy爬虫生成JSON文件(无需bat脚本)

当然可以!完全不用依赖bat脚本,直接在Python代码里就能搞定这两个爬虫的调用,我给你两种靠谱的实现方式:

方法一:用subprocess直接执行Scrapy命令

这种方式和你原来的bat脚本逻辑最接近,只不过把bat里的命令直接搬到Python中执行,还能通过参数指定工作目录,省去切换路径的步骤:

import subprocess

# 定义爬虫所在的目录路径
SPIDER_WORK_DIR = r"C:\Python\crawler\crawler\spiders"

# 执行第一个爬虫,生成project1.json
subprocess.run(
    ["scrapy", "crawl", "project1", "-o", "project1.json"],
    cwd=SPIDER_WORK_DIR,  # 这里直接指定工作目录,替代bat里的cd命令
    check=True  # 开启后如果爬虫执行失败,会直接抛出异常,方便排查问题
)

# 执行第二个爬虫,生成project2.json
subprocess.run(
    ["scrapy", "crawl", "project2", "-o", "project2.json"],
    cwd=SPIDER_WORK_DIR,
    check=True
)

小贴士:subprocess.run是Python3.5+推荐使用的方法,比旧的subprocess.call功能更完善,比如支持捕获输出、设置超时等。

方法二:调用Scrapy原生Python API

如果你想要更“原生”的集成方式,不启动外部进程,直接在Python环境里运行爬虫,这种方法会更灵活:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

# 获取Scrapy项目的默认配置
settings = get_project_settings()
# 配置输出文件的格式和路径
settings.set("FEEDS", {
    "project1.json": {"format": "json"},
    "project2.json": {"format": "json"},
})

# 创建爬虫进程
process = CrawlerProcess(settings)

# 导入你的爬虫类(请替换成你实际的爬虫类路径)
from spiders.project1 import Project1Spider
from spiders.project2 import Project2Spider

# 将两个爬虫添加到进程中
process.crawl(Project1Spider)
process.crawl(Project2Spider)

# 启动所有爬虫,脚本会阻塞直到所有爬虫执行完成
process.start()

这种方法的优势在于:不需要调用外部命令,能直接在Python代码里控制爬虫的行为(比如动态修改配置、给爬虫传递参数),还能避免外部进程的额外开销。不过需要注意,你的Python脚本需要能正确识别Scrapy项目的配置(比如把脚本放在Scrapy项目的根目录下,或者提前设置好Scrapy的环境变量)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:12:48