下面是我用来调用scrapy的python脚本
Scrapy crawl from script always blocks script execution after scraping
def stop_reactor():
reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = MySpider(start_url='abc')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg('Running reactor...')
reactor.run() # the script will block here until the spider is closed
log.msg('Reactor stopped.')
这是我的管道.py代码
^{pr2}$这个密码是从这里取的
Scrapy :: Issues with JSON export
当我像这样运行爬虫的时候
scrapy crawl MySpider -a start_url='abc'
创建了一个具有预期输出的links文件,但是当我执行python脚本时,它并没有创建任何文件,尽管爬虫程序运行时转储的垃圾统计数据与上次运行的相似。 我认为python脚本中有一个错误,因为文件是在第一种方法中创建的?在
一个对我有效的解决方案是放弃run脚本和使用内部API,而是使用命令行&gnupallel来并行化。在
要运行所有已知的spider,每个核心一个:
scrapy list
每行列出一个spider,允许我们将它们作为参数传递到传递给GNU Parallel的命令(scrapy crawl
)的后面。line-buffer
表示从进程返回的输出将被打印到stdout mixed,但要逐行打印,而不是将四分之一行混在一起(对于其他选项,请查看group
和ungroup
)。在注意:显然这在有多个CPU内核的机器上运行得最好,因为默认情况下,gnupallell将为每个内核运行一个作业。请注意,与许多现代开发机器不同,廉价的AWS EC2和DigitalOcean层只有一个虚拟CPU核心。因此,如果希望在一个内核上同时运行作业,则必须使用gnuparellel的
^{pr2}$jobs
参数。e、 g为每个核心运行2个碎片爬虫:这个代码对我有用:
相关问题 更多 >
编程相关推荐