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

