【问题标题】:Scrapy spider_idle signal - need to add requests with parse item callbackScrapy spider_idle 信号 - 需要添加带有解析项回调的请求
【发布时间】:2017-08-31 12:27:21
【问题描述】:

在我的 Scrapy 蜘蛛中,我重写了 start_requests() 方法,以便从数据库中检索一些额外的 url,这些 url 代表可能在爬网中遗漏的项目(孤立项目)。这应该在爬行过程结束时发生。类似(伪代码):

def start_requests(self):
    for url in self.start_urls:
        yield Request(url, dont_filter=True)

    # attempt to crawl orphaned items
    db = MySQLdb.connect(host=self.settings['AWS_RDS_HOST'],
                         port=self.settings['AWS_RDS_PORT'],
                         user=self.settings['AWS_RDS_USER'],
                         passwd=self.settings['AWS_RDS_PASSWD'],
                         db=self.settings['AWS_RDS_DB'],
                         cursorclass=MySQLdb.cursors.DictCursor,
                         use_unicode=True,
                         charset="utf8",)
    c=db.cursor()

    c.execute("""SELECT p.url FROM products p LEFT JOIN product_data pd ON p.id = pd.product_id AND pd.scrape_date = CURDATE() WHERE p.website_id = %s AND pd.id IS NULL""", (self.website_id,))

    while True:
        url = c.fetchone()
        if url is None:
            break
        # record orphaned product
        self.crawler.stats.inc_value('orphaned_count')
        yield Request(url['url'], callback=self.parse_item)
    db.close()

不幸的是,爬虫在其余的爬取过程中似乎将这些孤立的项目排队 - 因此,实际上,太多的项目被视为孤立的(因为爬虫尚未在正常爬取中检索到这些项目,当执行数据库查询)。

我需要在爬行结束时发生这个孤立的进程 - 所以我相信我需要使用 spider_idle 信号。

但是,我的理解是我不能简单地在我的蜘蛛空闲方法中产生请求 - 而我可以使用 self.crawler.engine.crawl?

我需要通过我的 Spider 的 parse_item() 方法处理请求(并且对于我配置的中间件、扩展和管道要遵守)。我怎样才能做到这一点?

【问题讨论】:

    标签: scrapy scrapy-spider scrapy-signal


    【解决方案1】:

    连接到idle signal 的idle 方法(假设idle 方法称为idle_method)应该接收spider 作为参数,因此您可以执行以下操作:

    def idle_method(self, spider):
        self.crawler.engine.crawl(Request(url=myurl, callback=spider.parse_item), spider)
    

    【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2019-08-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多