笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

信号

发布者: 笨鸟自学网



延迟信号处理程序

一些信号支持返回 Deferred 对象,允许您运行不阻塞Scrapy的异步代码。如果信号处理程序返回 Deferred ,小淘气等着呢 Deferred 开火。

举个例子:

class SignalSpider(scrapy.Spider):
    name = 'signals'
    start_urls = ['http://quotes.toscrape.com/page/1/']

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super(SignalSpider, cls).from_crawler(crawler, *args, **kwargs)
        crawler.signals.connect(spider.item_scraped, signal=signals.item_scraped)
        return spider

    def item_scraped(self, item):
        # Send the scraped item to the server
        d = treq.post(
            'http://example.com/post',
            json.dumps(item).encode('ascii'),
            headers={b'Content-Type': [b'application/json']}
        )

        # The next item will be scraped only after
        # deferred (d) is fired
        return d

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

见 内置信号参考 下面要知道哪些信号支持 Deferred .

内置信号参考

这是一个零碎的内置信号列表及其含义。

发动机信号

engine_started

scrapy.signals.engine_started()

当废引擎开始爬行时发送。

此信号支持从其处理程序返回延迟。

注解

此信号可能被触发 之后 这个 spider_opened 信号,取决于蜘蛛是如何启动的。所以 不要 依靠这个信号 spider_opened .

engine_stopped

scrapy.signals.engine_stopped()

在报废引擎停止时发送(例如,当爬行过程完成时)。

此信号支持从其处理程序返回延迟。

项目信号

注解

最大值时 CONCURRENT_ITEMS 项是并行处理的,许多延迟是使用 DeferredList . 因此,下一批将等待 DeferredList 激发,然后为下一批报废的项运行相应的项信号处理程序。

item_scraped

scrapy.signals.item_scraped(itemresponsespider)

当一个项目被爬取时发送,当它通过所有 项目管道 阶段(不下降)。

此信号支持从其处理程序返回延迟。

参数
  • item (item object) -- 刮掉的东西

  • spider (Spider object) -- 爬取项目的蜘蛛

  • response (Response object) -- 从项目被爬取的地方得到的响应

item_dropped

scrapy.signals.item_dropped(itemresponseexceptionspider)

从中删除项目后发送 项目管道 当某个阶段 DropItem 例外。

此信号支持从其处理程序返回延迟。

参数
  • item (item object) -- 从中删除的项 项目管道

  • spider (Spider object) -- 爬取项目的蜘蛛

  • response (Response object) -- 从中删除项的响应

  • exception (DropItem exception) -- 例外情况(必须是 DropItem 子类)导致该项被删除


上一篇:核心API下一篇:调度程序

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-11-21 21:33 , Processed in 0.106770 second(s), 17 queries .

© 2001-2020

返回顶部