from collections import deque
class URLQueue():
def __init__(self):
self.queue = deque() # 待抓取的网页
self.visited = set() # 已经抓取过的网页
def new_url_size(self):
'''''
获取未爬取URL集合的大小
:return:
'''
return len(self.queue)
def old_url_size(self):
'''''
获取已爬取URL的大小
:return:
'''
return len(self.visited)
def has_new_url(self):
'''''
判断是否有未爬取的URL
:return:
'''
return self.new_url_size() != 0
def get_new_url(self):
'''''
获取一个未爬取的URL
:return:
'''
new_url = self.queue.popleft()#从左侧取出一个链接
self.old_urls.add(new_url)#记录已经抓取
return new_url
def add_new_url(self, url):
'''''
将新的URL添加到未爬取的URL集合
:param url: 单个url
:return:
'''
if url is None:
return False
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.append(url)
def add_new_urls(self, urlset):
'''''
将新的URL添加到未爬取的URL集合
:param urlset: url集合
:return:
'''
if urlset is None or len(urlset) == 0:
return
for url in urlset:
self.add_new_url(url)