我在Scrapy中有一個Scrapy設置,它以數字序列中的1M個唯一URL爲目標。例如:http://www.foo.com/PIN=000000000001Scrapy spider_idle調用重新啓動刮擦
我把PIN碼保存在數據庫中。我不是將1M PIN碼加載到內存中並創建1M個start_urls,而是使用start_requests()函數一次向數據庫查詢5000個PIN。完成5000個唯一的URL後,我想重新開始抓取,並繼續進行,直到抓取所有1M網址。在scrapy用戶組中,他們建議我使用spider_idle函數來繼續重新開始刮擦。我已經按照下面的代碼正確設置了它,但我似乎無法找到正確的代碼來重新啓動刮擦。見下:
class Foo(Spider):
name = 'foo'
allowed_domains = ['foo.com']
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
dispatcher.connect(self.spider_idle, signals.spider_idle)
def spider_idle(self, spider):
print 'idle function called' # this prints correctly so I know this function is getting called.
self.start_requests() #this code does not restart the query
def start_requests(self):
data = self.coll.find({'status': 'unscraped'}).limit(5000)
for row in data:
pin = row['pin']
url = 'http://foo.com/Pages/PIN-Results.aspx?PIN={}'.format(pin)
yield Request(url, meta={'pin': pin})
我需要什麼代碼重新啓動刮擦?
你的'start_requests()'方法是怎麼樣的?謝謝。 – alecxe 2014-10-03 13:02:26
我剛剛修改了代碼以包含start_requests()方法。 – dfriestedt 2014-10-03 13:27:25