- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Scrapy 1.x documentation解释了有两种方法可以从脚本中运行 Scrapy 蜘蛛:
CrawlerProcess
CrawlerRunner
两者有什么区别?什么时候用“process”,什么时候用“runner”?
最佳答案
Scrapy 的文档在给出两者的实际应用示例方面做得非常糟糕。
CrawlerProcess
假设scrapy 是唯一会使用twisted react 器的东西。如果您在 python 中使用线程来运行其他代码,这并不总是正确的。让我们以此为例。
from scrapy.crawler import CrawlerProcess
import scrapy
def notThreadSafe(x):
"""do something that isn't thread-safe"""
# ...
class MySpider1(scrapy.Spider):
# Your first spider definition
...
class MySpider2(scrapy.Spider):
# Your second spider definition
...
process = CrawlerProcess()
process.crawl(MySpider1)
process.crawl(MySpider2)
process.start() # the script will block here until all crawling jobs are finished
notThreadSafe(3) # it will get executed when the crawlers stop
现在,如您所见,该函数只会在爬虫停止时执行,如果我希望在爬虫在同一个 react 器中爬行时执行该函数怎么办?
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
import scrapy
def notThreadSafe(x):
"""do something that isn't thread-safe"""
# ...
class MySpider1(scrapy.Spider):
# Your first spider definition
...
class MySpider2(scrapy.Spider):
# Your second spider definition
...
runner = CrawlerRunner()
runner.crawl(MySpider1)
runner.crawl(MySpider2)
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.callFromThread(notThreadSafe, 3)
reactor.run() #it will run both crawlers and code inside the function
Runner 类不限于此功能,您可能需要在 react 器上进行一些自定义设置(延迟、线程、getPage、自定义错误报告等)
关于python - CrawlerProcess 与 CrawlerRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706005/
场景: 具有多个蜘蛛的单个 scrapy 项目。 所有蜘蛛从脚本一起运行。 问题: 同一 namespace 中的所有日志消息。不可能知道哪个消息属于哪个蜘蛛。 在 scrapy 0.24 中,我在一
Scrapy 1.x documentation解释了有两种方法可以从脚本中运行 Scrapy 蜘蛛: 使用 CrawlerProcess 使用 CrawlerRunner 两者有什么区别?什么时候用
我在 python 中编写了一个脚本,使用 scrapy 从网站收集不同帖子的名称及其链接。当我从命令行执行我的脚本时,它可以完美运行。现在,我的意图是使用 CrawlerProcess() 运行脚本
将执行以下代码,创建没有错误的文件。但是,它没有保存到 json 文件中。 我关闭了 autothrottle,它在过去会干扰下载数据,但并没有解决问题。 Scrapy==1.4.0 class My
我有两个 CrawlerProcesses,每个都调用不同的蜘蛛。我想将自定义设置传递给这些进程之一以将蜘蛛的输出保存到 csv,我想我可以这样做: storage_settings = {'FEED
我有一些看起来像这样的代码: def run(spider_name, settings): runner = CrawlerProcess(settings) runner.craw
我正在从另一个脚本运行 scrapy 蜘蛛,我需要从 Crawler 检索并保存到变量统计信息。我查看了文档和其他 StackOverflow 问题,但未能解决此问题。 这是我运行爬行的脚本: imp
我正在尝试通过脚本以编程方式调用蜘蛛。我无法使用 CrawlerProcess 通过构造函数覆盖设置。让我用默认的爬虫来说明这一点,它用于从官方 scrapy 站点(最后一个代码片段在 officia
我想使用 scrapy-splash 来获取目标页面的 html 和屏幕截图 png。我需要能够以编程方式调用它。根据spashy doc ,指定 endpoint='render.json' 并传递
我是一名优秀的程序员,十分优秀!