用于记录学习爬虫过程中遇到的断点续爬、url去重问题学习 。
环境
- redis
- python
- 第三方库 redis 。安装 pip install redis
核心功能,基于redis里面set类型,达到去重,插入,记录的小功能。
代理实现:
import redis
class UrlManager:
def __init__(spider_name='',host='127.0.0.1',port=6379):
'''初始redis连接'''
self.__conn = redis.Redis(host=host,port=port)
self.__new = spider_name + '_new'#存放待爬取url
self.__old = spider_name +'_old'#存放已爬取url
def adds(self,*args):
"""插入待爬取url,记录已爬取url"""
for url in agrs:
if not self.__conn.sismember(self.__old,url):#判断是否是已爬取url元素,返回TRUE则存在,否则,写入待爬取url
self.__conn.sadd(self.__new,url)
else:
return True
def get_url(self):
"""从待爬取集合获取要爬取url供给爬虫"""
url = self.__conn.spop(self.__new)#待爬取集合获取url
if url :
self.__conn.sadd(self.__old,url)#写入已爬取集合,并且返回该条url
return url
else:
return False
def back_error(self,url):
"""对于请求失败的url,则继续加入代爬取集合"""
try :
self.__conn.smove(self.__old,self__new,url,url)
return True
except:
return False
def count_newurl(self):
"""获取未爬取url数量"""
return self.__conn.scard(self.__new)