9

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

我有以下几点:

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

我可以使用上面指定的命令非常愉快地运行我的项目scrapy,但是我正在编写集成测试并且我想以编程方式:

  • 使用中的设置settings.py和具有my_crawlername 属性的爬虫启动爬虫(我可以从我的测试模块轻松实例化这个类。
  • 我希望所有管道和中间件都按照settings.py.
  • 我很高兴在爬虫完成之前阻止该过程。管道将内容转储到数据库中,这是我将在爬网完成后检查的数据库内容以满足我的测试。

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

4

2 回答 2

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

请参阅文档的这一部分

于 2013-09-10T16:57:07.180 回答
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()
于 2015-01-01T17:43:02.567 回答