当前位置:  开发笔记 > 编程语言 > 正文

从Scrapy管道发出非阻塞HTTP请求

如何解决《从Scrapy管道发出非阻塞HTTP请求》经验,为你挑选了1个好方法。

据我了解,Scrapy是单线程但在网络端异步.我正在开发一些需要从项目管道中对外部资源进行API调用的东西.有没有办法在不阻塞管道的情况下发出HTTP请求并减慢Scrapy的爬行速度?

谢谢



1> Granitosauru..:

您可以通过直接将请求安排到crawler.enginevia来完成crawler.engine.crawl(request, spider).但要做到这一点,你需要在管道中公开爬虫:

class MyPipeline(object):
    def __init__(self, crawler):
        self.crawler = crawler

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)

    def process_item(self, item, spider):
        if item['some_extra_field']:  # check if we already did below
            return item
        url = 'some_url'
        req = scrapy.Request(url, self.parse_item, meta={'item':item})
        self.crawler.engine.crawl(req, spider)
        raise DropItem()  # we will get this item next time

    def parse_item(self, response):
        item = response.meta['item']
        item['some_extra_field'] = '...'
        return item

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有