gpt4 book ai didi

mysql - scrapy中间件MySQL select的瓶颈

转载 作者:行者123 更新时间:2023-11-29 10:50:50 25 4
gpt4 key购买 nike

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

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] INFO: Crawled 4 pages (at 0 pages/min), scraped 4 items (at 2 items/min)

禁用后:

[scrapy.extensions.logstats] INFO: Crawled 55 pages (at 55 pages/min), scraped 0 items (at 0 items/min)

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

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

示例:

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

我想做的是:

  1. 从MySQL获取url数据
  2. 将 URL 数据放入请求 finger_prints

我该怎么做?

最佳答案

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

虽然这将导致显着的加速,但我怀疑还有其他瓶颈,一旦这个问题得到解决,就会出现。

关于mysql - scrapy中间件MySQL select的瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com