Python 如何恢复刮痧蜘蛛它停止了?
我有一个非常大的网站与许多网址,我想蜘蛛。有没有办法告诉Scrapy忽略URL列表 现在我将所有URL存储在DB列中,我希望能够重新启动spider,但将长列表(24k行)传递给Scrapy,以便它知道跳过已经看到的URL 有什么办法可以这样做吗Python 如何恢复刮痧蜘蛛它停止了?,python,django,scrapy,scrapy-spider,Python,Django,Scrapy,Scrapy Spider,我有一个非常大的网站与许多网址,我想蜘蛛。有没有办法告诉Scrapy忽略URL列表 现在我将所有URL存储在DB列中,我希望能够重新启动spider,但将长列表(24k行)传递给Scrapy,以便它知道跳过已经看到的URL 有什么办法可以这样做吗 class MySpider(Spider): custom_settings = { 'AUTOTHROTTLE_ENABLED': True, 'DOWNLOAD_DELAY': 1.5, '
class MySpider(Spider):
custom_settings = {
'AUTOTHROTTLE_ENABLED': True,
'DOWNLOAD_DELAY': 1.5,
'DEPTH_LIMIT': 0,
'JOBDIR': 'jobs/scrapy_1'
}
name = None
allowed_domains = []
start_urls = []
def parse(self, response):
for link in le.extract_links(response):
yield response.follow(link.url, self.parse)
你必须将刮取的URL存储在某个地方,我通常在MySQL中这样做,然后当我重新启动刮取器时,我会像这样忽略它们
class YourSpider(scrapy.Spider):
def parse(self, response):
cursor.execute("SELECT url FROM table")
already_scraped = tuple(a['url'] for a in cursor.fetchall())
for link in le.extract_links(response):
if url not in already_scraped:
yield Request(...)
else:
self.logger.error("%s is already scraped"%(link.url))
检查数据库中的信息:
def check_duplicate_post_links(self, links):
new_links = []
for link in links:
sql = 'SELECT id FROM your_table WHERE url = %s'
self.cursor.execute(sql, (url,))
duplicate_db = self.cursor.fetchall()
if duplicate_db:
self.logger.error("error url duplicated: {}".format(link))
else:
new_links.append(link)
return new_links
class YourSpider(scrapy.Spider):
def parse(self, response):
links = le.extract_links(response):
new_links = self.check_duplicate_post_links(links)
if len(new_links) > 0:
for link in new_links:
#Add your information
item = YourScrapyItem()
item['url'] = link.url
yield item
如果您提供一些代码,它会很有帮助。否则答案就不能满足您的需要。我添加了我的代码。我看到scrapy提供工作。然而,在当前的设置下,scrapy似乎并没有正确地选择上一份工作的结束位置。太好了,正是我想要的!谢谢大家投票并接受我的答案,同时请注意我使用了
tuple
而不是list
。。。这是因为元组使用的内存比list
要少。你能澄清一下newurl应该是什么吗?:P我写了newurl
只是为了让你理解,newurl
是你想要抓取的新url列表,但它是一个蜘蛛。我没有确切的新URL列表