用於記錄學習爬蟲過程中遇到的斷點續爬、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)