command-line - Scrapy cmdline.execute 停止脚本

标签 command-line scrapy

当我打电话

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/

相关文章:

command-line - 如何将命令行参数传递给 PowerShell ps1 文件

php - 仅使用文件名而不使用php命令在命令行中执行php脚本

python - 无法部署scrapy项目

python - python3创建scrapy项目的方法

python - scrapy 用户超时导致连接失败

networking - `net use` 启动脚本后网络驱动器进入炼狱

video - ffmpeg 无法扩展绘图文本

c++ - 如何在 CLI 上打印下标/上标?

python - 将 tun0(TUN 接口(interface))与 Scrapy 一起使用

python - scrapy 新手运行 scrapy crawl dmoz 时出现 : tutorial. 错误