当我想跑scrapy只蜘蛛时,我可以通过拨打scrapy.cmdline.execute(['scrapy', 'crawl', 'myspider'])os.system('scrapy crawl myspider')subprocess.run(['scrapy', 'crawl', 'myspider'])来实现.

我的问题是:Why would I prefer to use scrapy.cmdline.execute over subprocess.run or os.system?

我还没有在scrapy的文档中找到关于这个函数的一个词,它也没有文档字符串,但我看到它在一些教程和代码示例中得到了积极的使用.

推荐答案

使用os.systemsubprocess.run都在子进程中运行命令,与使用scrapy.cmdline.execute一样,您将直接调用scrapy入口点函数,然后在与调用该函数的脚本相同的进程中执行所有代码.

  • 为什么你会 Select 一个而不是另一个呢?

作为一般规则,Python官方推荐使用subprocess模块,而不是调用os.system(有关更多信息,请参阅os.system的文档),而且subprocess API更易于使用,并提供更多控制,因此不应真正考虑os.system选项.

对于其他两种方法,虽然我相信有很多理由 Select 其中一种,但我不建议使用这两种方法中的任何一种.SCRAPPY提供了大量工具来帮助执行CrawlerProcessCrawlerRunner等脚本中的爬行器,这些脚本应该不需要从子进程访问CLI,或者直接从脚本调用CLI入口点函数.(尽管我相信这方面有很多例外)

相反,我建议使用CLI工具作为CLI工具,并在需要通过Python代码进行控制时使用CrawlerProcess或类似的工具.

参见Running scrapy from a script了解更多关于如何从python代码运行scrapy的信息.

Python相关问答推荐

来自ARIMA结果的模型方程

单击Python中的复选框后抓取数据

无法使用equals_html从网址获取全文

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

在Pandas 日历中插入一行

如何过滤包含2个指定子字符串的收件箱列名?

如果条件不满足,我如何获得掩码的第一个索引并获得None?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

部分视图的DataFrame

迭代嵌套字典的值

字符串合并语法在哪里记录

Django RawSQL注释字段

用砂箱开发Web统计分析

如何在FastAPI中为我上传的json文件提供索引ID?

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

如何将数据帧中的timedelta转换为datetime

巨 Python :逆向猜谜游戏

Discord.py -

Polars map_使用多处理对UDF进行批处理

如何过滤组s最大和最小行使用`transform`'