【问题标题】:Bottleneck in scrapy middlewears MySQL selectscrapy 中间件 MySQL 选择中的瓶颈
【发布时间】:2017-05-03 13:34:41
【问题描述】:

我已经测试过它是什么瓶颈。它来自中间件中的选择查询。

class CheckDuplicatesFromDB(object):

 def process_request(self, request, spider):

    #  url_list is a just python list. some urls in there.
    if (request.url not in url_list):
        self.crawled_urls = dict()

        connection = pymysql.connect(host='123',
                                     user='123',
                                     password='1234',
                                     db='123',
                                     charset='utf8',
                                     cursorclass=pymysql.cursors.DictCursor)

        try:
            with connection.cursor() as cursor:
                # Read a single record

                sql = "SELECT `url` FROM `url` WHERE `url`=%s"
                cursor.execute(sql, request.url)
                self.crawled_urls = cursor.fetchone()

            connection.commit()
        finally:
            connection.close()

        if(self.crawled_urls is None):
            return None
        else:
            if (request.url == self.crawled_urls['url']):
                raise IgnoreRequest()
            else:
                return None
    else:
        return None

如果我在setting.py 中禁用DOWNLOADER_MIDDLEWEARS,scrapy 抓取速度还不错。

禁用前:

scrapy.extensions.logstats] 信息:爬取 4 页(0 页/分钟),抓取 4 项(2 项/分钟)

禁用后:

[scrapy.extensions.logstats] INFO:抓取 55 页(以 55 页/分钟),抓取 0 项(以 0 项/分钟)

我猜选择查询是问题所在。所以,我想选择一次查询并获取一个url数据来放置请求finger_prints

我正在使用 CrawlerProcess:蜘蛛越多,每分钟抓取的页面越少。

例子:

  • 1 个蜘蛛 => 50 页/分钟
  • 2 个蜘蛛 => 总共 30 页/分钟
  • 6 个蜘蛛 => 总共 10 页/分钟

我想做的是:

  1. 从 MySQL 获取 url 数据
  2. 将url数据放入Requestfinger_prints

我该怎么做?

【问题讨论】:

    标签: mysql scrapy fingerprint


    【解决方案1】:

    一个主要问题是,您在每次响应/调用process_request 时都会打开到 sql 数据库的新连接。而是打开一次连接并保持打开状态。

    虽然这将导致重大加速,但我怀疑还有其他瓶颈,一旦解决此问题就会出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多