【发布时间】: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 页/分钟
我想做的是:
- 从 MySQL 获取 url 数据
- 将url数据放入Request
finger_prints
我该怎么做?
【问题讨论】:
标签: mysql scrapy fingerprint