首页 > 解决方案 > Scrapy:批量上传到数据库的最快方法?

问题描述

我的 Scrapy 蜘蛛每 1000 个抓取的 URL 将结果上传到 Mongo 数据库。我在上传之前将结果附加到列表中。鉴于附加到列表有点慢,有没有办法使用列表理解来保存结果?保存到列表最快吗?

这是我的(简化的)蜘蛛:

class QuotesSpider(scrapy.Spider):
    name = "spy"

    def __init__(self):
        # init MongoDB instance
        self.res_list = []
        self.urls = self.x.urls(10000)

    def start_requests(self):
        for url in self.urls:
            yield scrapy.Request(url=url, callback=self.parse)

    async def do_insert(self, documents):
        await self.db['coll'].insert_many(documents)

    def parse(self, r):
        res = self.x.process(r)
        self.res_list.append(res)
        if len(self.res_list) > 1000:
            url_list = [u['url'] for u in self.res_list]
            loop = asyncio.get_event_loop()
            loop.run_until_complete(self.do_insert(self.res_list))
            print('UPLOADING TO DATABASE...')
            self.res_list = []

标签: mongodbweb-scrapingscrapydatabase-performance

解决方案


推荐阅读