当我打电话
cmdline.execute("scrapy crawl website".split())
print "Hello World"
它在 cmdline.execute 之后停止脚本,并且不运行脚本的其余部分并打印“Hello World”。我该如何解决这个问题?
最佳答案
通过查看 Scrapy 的 cmdline.py
中的 execute
函数,您会看到最后一行是:
sys.exit(cmd.exitcode)
如果您直接调用 execute
函数,则确实没有办法绕过此 sys.exit
调用,至少在不更改它的情况下是这样。猴子修补是一种选择,尽管不是一个好选择!更好的选择是避免完全调用 execute
函数,而是使用下面的自定义函数:
from twisted.internet import reactor
from scrapy import log, signals
from scrapy.crawler import Crawler as ScrapyCrawler
from scrapy.settings import Settings
from scrapy.xlib.pydispatch import dispatcher
from scrapy.utils.project import get_project_settings
def scrapy_crawl(name):
def stop_reactor():
reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
scrapy_settings = get_project_settings()
crawler = ScrapyCrawler(scrapy_settings)
crawler.configure()
spider = crawler.spiders.create(name)
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
你可以这样调用它:
scrapy_crawl("your_crawler_name")
关于command-line - Scrapy cmdline.execute 停止脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875280/