我已经测试过它的瓶颈是什么。它来自中间层的select查询。
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如果我在DOWNLOADER_MIDDLEWEARS中禁用setting.py,抓取速度也不错。
在残疾前:
scrapy.extensions.logstats]信息:爬行4页(0页/分钟),刮4项(2项/分钟)
残疾后:
scrapy.extensions.logstats信息:抓取55页( 55页/分钟),刮0项(0项/分钟)
我想select查询是问题所在。因此,我想选择一次查询并获取一个url数据来放置请求finger_prints。
我正在使用CrawlerProcess:蜘蛛越多,爬行页面/分钟就越少。
示例:
我想做的是:
finger_prints我该怎么做?
发布于 2017-05-04 12:07:00
一个主要的问题是,在每次响应/调用process_request时,都会打开到sql数据库的新连接。相反,只打开一次连接并保持其打开。
虽然这将导致一个重大的加速,我怀疑还有其他瓶颈,一旦这一问题得到解决。
https://stackoverflow.com/questions/43761650
复制相似问题