1. scrapy对request的URL去重
yield scrapy.Request(url, self.parse, dont_filter=False)
注意这个参数:dont_filter=False
2. Jobs: 暂停,恢复爬虫
启用一个爬虫的持久化,运行以下命令:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
然后,你就能在任何时候安全地停止爬虫(按Ctrl-C或者发送一个信号)。
恢复这个爬虫也是同样的命令:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
这样爬虫断掉后,再启动会接着上次的 url 跑。
详细请看 https://www.howtoing.com/scra...
如果命令行里不想看到那么多输出的话,可以加个 -L WARNING 参数
运行爬虫如: scrapy crawl spider1 -L WARNING
1、Pipleline 加入如下代码:(在数据爬完后将URL塞入redis去重)
class RedisInsert(object):
def process_item(self,item,spider):
set_redis_values_1(item['url'])
return item
2、Middleware加入如下代码:(在爬数据之前查看该URL是否爬取过)
class IngoreRequestMiddleware(object):
def __init__(self):
self.middlewareLogging=getLogger("IngoreRequestMiddleware")
def process_request(self,request,spider):
if get_redis_values_1(request.url):
self.middlewareLogging.debug("IgnoreRequest : %s" % request.url)
raise IgnoreRequest("IgnoreRequest : %s" % request.url)
else: self.middlewareLogging.debug("haveRequest : %s" % request.url)
return None
---------------------