博文配套视频课程:24小时实现从零到AI人工智能
URL管理器
管理待抓取的URL集合和已抓取的URL集合,管理器:防止重复抓取、防止循环抓取,管理器最小功能范围如下
管理器代码实现
class UrlManager():
# 创建set集合
def __init__(self):
# 空集合 set(), 空{}代表dict
self.new_url = set() # 待下载url
self.old_url = set() # 已下载url
# 编写一个方法,添加url
def add_url(self, url):
if (url not in self.new_url) and (url not in self.old_url):
self.new_url.add(url)
# 编写一个方法,同时添加多个url
def add_urls(self, urls):
for url in urls:
# 调用当前类的方法
self.add_url(url)
# 编写一个方法,随机返回一个待下载的url地址
def get_url(self):
# 随机返回
url = self.new_url.pop()
# 添加到已下载的set集合中
self.old_url.add(url)
return url
# 判断是否存在待下载的url
def has_url(self):
return len(self.new_url) > 0
管理器代码测试
# 单元测试代码,在模块被调用时不会执行
if __name__ == "__main__":
um = UrlManager()
# 添加已下载的url地址
um.add_urls(["http://www.163.com", "http://www.163.com", "http://www.baidu.com"])
print('目前待下载地址为:',um.new_url)
print('将要下载的url地址为:', um.get_url())
print(f'待下载的地址{um.new_url},已下载的地址{um.old_url}')