Python 在Scrapy>;中以编程方式启动爬虫程序的最简单方法是什么0.14

Python 在Scrapy>;中以编程方式启动爬虫程序的最简单方法是什么0.14,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我想从Python模块启动Scrapy中的爬虫程序。我想从本质上模仿$scrapy crawl my_crawler-a some_arg=value-L DEBUG的本质 我已准备好以下事项: 项目的settings.py文件 项目和管道 一个爬虫类,它扩展BaseSpider并在初始化时需要参数 我可以很高兴地使用上面指定的scrapy命令运行我的项目,但是我正在编写集成测试,我希望通过编程: 使用settings.py中的设置和具有my_crawlername属性的爬网程序启动爬网(

我想从Python模块启动Scrapy中的爬虫程序。我想从本质上模仿
$scrapy crawl my_crawler-a some_arg=value-L DEBUG的本质

我已准备好以下事项:

  • 项目的settings.py文件
  • 项目和管道
  • 一个爬虫类,它扩展BaseSpider并在初始化时需要参数
我可以很高兴地使用上面指定的
scrapy
命令运行我的项目,但是我正在编写集成测试,我希望通过编程:

  • 使用
    settings.py
    中的设置和具有
    my_crawler
    name属性的爬网程序启动爬网(我可以从测试模块轻松实例化此类)
  • 我希望按照
    settings.py
    中的规范使用所有管道和中间件
  • 在爬网程序完成之前,我很高兴进程被阻塞。管道将东西转储到数据库中,这是爬网完成后我将检查的数据库内容,以满足我的测试
那么,有人能帮我吗?我在网上看到过一些例子,但它们要么是针对多个蜘蛛的黑客,要么是绕过
Twisted的
blocking特性,要么不使用Scrapy 0.14或更高版本。我只需要一些真正简单的东西。:-)


@wilfred在官方文档中的回答很好,除了日志部分,以下是我的:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from testspiders.spiders.followall import FollowAllSpider
from scrapy.utils.project import get_project_settings

spider = FollowAllSpider()
crawler = crawler = Crawler(get_project_settings())
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start_from_settings(get_project_settings())
reactor.run()

子进程有什么问题。检查输出(['scrapy',…],stderr=subprocess.STDOUT)
?我觉得启动另一个进程并执行外部脚本有点麻烦。我知道可以在同一个过程中完成这项工作(很明显),我想知道如何自己完成这项工作。:-)如果它是一个集成测试,那么它就不是一个黑客,否则您将依赖于特定版本的scrapy(内部更改速度比命令行界面快)。请查看以下帖子:@J.F.Sebastian我正在处理OSX,如果我只使用两个子进程,即两个scrapy实例,那么第二个实例将消耗90%的CPU。这是不可行的。
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from testspiders.spiders.followall import FollowAllSpider
from scrapy.utils.project import get_project_settings

spider = FollowAllSpider()
crawler = crawler = Crawler(get_project_settings())
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start_from_settings(get_project_settings())
reactor.run()