私はそれが何のボトルネックかをテストしました。それはmiddlewearsの選択クエリからです。治療ミドルウェアのボトルネックMySQL選択
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:無効にした後にクロール4ページ(0ページ/分で)(/分の2つの項目で)4個の商品を掻き
:
[scrapy.extensions.logstats] INFO:クロール55ページ(55ページ/分)、(/分の商品で)0アイテムを掻き
選択クエリが問題だと思います。だから、私は一度クエリを選択し、要求を入れるURLデータを取得したいと希望finger_prints
。
私はCrawlerProcessを使用しています。スパイダーが多いほど、ページ/分が少なくなります。
例:
- 1スパイダー=> 50ページ/分
- 2スパイダー=>合計30ページ/分
- 6スパイダー=>合計10ページ/分
私がしたいのは:
- からのURLデータを取得する
- は、私はこれを行うことができますどのように
finger_prints
を要求するURLデータを置きますか?