当我想运行scrapy spider时,我可以通过调用scrapy.cmdline.execute(['scrapy', 'crawl', 'myspider'])
或os.system('scrapy crawl myspider')
或subprocess.run(['scrapy', 'crawl', 'myspider'])
来完成。
我的问题是:为什么我更喜欢使用scrapy.cmdline.execute而不是subprocess.run或os.system?
我在scrappy的文档中没有找到关于这个函数的任何文字,它也没有文档字符串,但是我看到它在一些教程和代码示例中被积极地使用。
1条答案
按热度按时间unftdfkk1#
使用
os.system
或subprocess.run
都在子进程中运行命令,其中与scrapy.cmdline.execute
一样,您直接调用scrapy入口点函数,然后所有代码都在调用该函数的脚本的同一进程中执行。Python官方建议使用
subprocess
模块而不是调用os.system
作为一般规则(有关更多信息,请参阅os.system
的文档),并且subprocess
API更易于使用并提供更多控制,因此不应真正考虑os.system
选项。对于另外两种方法,虽然我相信有很多理由选择其中一种,但我不建议使用这两种方法。Scrapy提供了大量工具,可以帮助从脚本(如
CrawlerProcess
和CrawlerRunner
)执行蜘蛛,这应该使从子进程访问CLI变得不必要。或者直接从脚本中调用CLI入口点函数。(尽管我确信有很多例外)相反,我建议使用CLI工具作为CLI工具,并在需要通过python代码控制scrapy时使用
CrawlerProcess
或类似工具。请参阅从脚本运行scrapy以了解有关如何从python代码运行scrapy的更多信息。