- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些看起来像这样的代码:
def run(spider_name, settings):
runner = CrawlerProcess(settings)
runner.crawl(spider_name)
runner.start()
return True
runner.start()
../../.virtualenvs/scrape-service/lib/python3.6/site-packages/scrapy/crawler.py:291: in start
reactor.run(installSignalHandlers=False) # blocking call
../../.virtualenvs/scrape-service/lib/python3.6/site-packages/twisted/internet/base.py:1242: in run
self.startRunning(installSignalHandlers=installSignalHandlers)
../../.virtualenvs/scrape-service/lib/python3.6/site-packages/twisted/internet/base.py:1222: in startRunning
ReactorBase.startRunning(self)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <twisted.internet.selectreactor.SelectReactor object at 0x10fe21588>
def startRunning(self):
"""
Method called when reactor starts: do some initialization and fire
startup events.
Don't call this directly, call reactor.run() instead: it should take
care of calling this.
This method is somewhat misnamed. The reactor will not necessarily be
in the running state by the time this method returns. The only
guarantee is that it will be on its way to the running state.
"""
if self._started:
raise error.ReactorAlreadyRunning()
if self._startedBefore:
> raise error.ReactorNotRestartable()
E twisted.internet.error.ReactorNotRestartable
runner.start()
当第二次测试运行时。但是有没有办法在测试之间重置它的状态?所以他们更加孤立,实际上可以互相追逐。
最佳答案
如果您使用 CrawlerRunner
而不是 CrawlerProcess
结合 pytest-twisted
,你应该能够像这样运行你的测试:
为 Pytest 安装 Twisted 集成:pip install pytest-twisted
from scrapy.crawler import CrawlerRunner
def _run_crawler(spider_cls, settings):
"""
spider_cls: Scrapy Spider class
settings: Scrapy settings
returns: Twisted Deferred
"""
runner = CrawlerRunner(settings)
return runner.crawl(spider_cls) # return Deferred
def test_scrapy_crawler():
deferred = _run_crawler(MySpider, settings)
@deferred.addCallback
def _success(results):
"""
After crawler completes, this function will execute.
Do your assertions in this function.
"""
@deferred.addErrback
def _error(failure):
raise failure.value
return deferred
_run_crawler()
将在 Twisted react 器中安排爬行,并在爬取完成时执行回调。在这些回调(
_success()
和
_error()
)中,您将进行断言。最后,您必须返回
Deferred
来自
_run_crawler()
的对象以便测试等到爬行完成。这部分与
Deferred
, 是必不可少的,必须对所有测试进行。
gatherResults
运行多次爬网和聚合结果的示例。 .
from twisted.internet import defer
def test_multiple_crawls():
d1 = _run_crawler(Spider1, settings)
d2 = _run_crawler(Spider2, settings)
d_list = defer.gatherResults([d1, d2])
@d_list.addCallback
def _success(results):
assert True
@d_list.addErrback
def _error(failure):
assert False
return d_list
关于python - 当 CrawlerProcess 运行两次时,Scrapy 引发 ReactorNotRestartable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48913525/
我一直在尝试使用具有以下功能的 Scrapy 在 Python 中制作一个应用程序: rest api(我是用 flask 做的)监听所有爬取/抓取请求并在爬取后返回响应。(爬取部分足够短, 这样
执行以下代码时出现 twisted.internet.error.ReactorNotRestartable 错误: from time import sleep from scrapy import
我有一些看起来像这样的代码: def run(spider_name, settings): runner = CrawlerProcess(settings) runner.craw
我正在使用两阶段爬网使用 Scrapy 汇总每日数据。第一阶段从索引页面生成 URL 列表,第二阶段将列表中的每个 URL 的 HTML 写入 Kafka 主题。 尽管爬网的两个组件是相关的,但我希望
我有两个测试类(TrialTest1 和 TrialTest2)写在两个文件中(test_trial1.py 和 test_trial2.py ) 大部分相同(唯一的区别是类名): from twis
当我执行以下代码时,出现 twisted.internet.error.ReactorNotRestartable 错误: from time import sleep from scrapy imp
我正在使用 CrawlerProcess 从脚本运行 Scrapy (版本 1.4.0)。网址来自用户输入。第一次运行良好,但第二次出现 twisted.internet.error.ReactorN
我的scrapy代码是这样的: import scrapy from scrapy.crawler import CrawlerProcess class MovieSpider(scrapy.Spi
我已经部署了一个scrapy项目,只要有 lambda api 请求,它就会爬行。 它在第一次 api 调用时运行良好,但后来失败并抛出 ReactorNotRestartable 错误。 据我所知,
我将网络爬虫部署到 AWS Lambda。然后在测试的时候,第一次运行正确,但是第二次就报这个错。在 AWS lambda 中引发 error.reactornotrestartable() twis
我有一个 Django 2.0、Celery 4 和 Scrapy 1.5 设置,我在 Django 自定义命令中有一个 Spider,我需要定期调用这个命令,我使用 Celery 调用这些命令,它们
我是一名优秀的程序员,十分优秀!