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

时间:2012-06-26 18:34:24

标签: python web-scraping scrapy

我想从Python模块开始Scrapy中的爬虫。我想基本上模仿$ scrapy crawl my_crawler -a some_arg=value -L DEBUG

的本质

我有以下几点:

  • 项目的settings.py文件
  • 项目和管道
  • 一个爬虫类,它扩展了BaseSpider并在初始化时需要参数。

我很高兴使用上面指定的scrapy命令运行我的项目,但是我正在编写集成测试,我想以编程方式运行:

  • 使用settings.py中的设置和具有my_crawler名称属性的抓取工具启动抓取(我可以轻松地从我的测试模块中实例化此类。
  • 我希望按照settings.py中的规范使用所有管道和中间件。
  • 我很高兴在爬虫完成之前阻止进程。管道将数据转储到数据库中,这是我在完成爬网以完成测试后将要检查的数据库的内容。

那么,任何人都可以帮助我吗?我在网上看过一些例子,但它们要么是针对多个蜘蛛的黑客,要么是Twisted's阻挡性质,或者不适用于Scrapy 0.14或更高版本。我只需要一些非常简单的东西。 : - )

2 个答案:

答案 0 :(得分:7)

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log, signals
from testspiders.spiders.followall import FollowAllSpider

spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run() # the script will block here until the spider_closed signal was sent

请参阅this part of the docs

答案 1 :(得分:3)

来自官方文档的@ 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()