URL 管理器是爬虫过程中重要的一环,使用它来管理在爬虫过程中众多的 URL 地址以免造成重复获取爬虫地址、爬虫 陷入死循环等情况的发生。比如,我们要根据 baidu.com 来进行爬虫,如果在爬虫的子页面中也包含 baidu.com 不做处理的话就会陷入循环,所以说,在爬虫过程中对 URL 进行很好的维护是非常重要的。
1、创建 url 管理对象及属性定义
1# 导入队列
2from collections import deque
3
4# 定义 url 管理器类
5class url_queue():
6 def __init__(self):
7 # 定义待爬取的队列
8 self.queue = deque()
9 # 定义已经爬取的集合,使用 set 集合保证去重
10 self.set = set()
2、将页面上获取到的 url 添加到没有爬取的队列
1def add_nocrawl_url(self,url):
2 '''
3 :return: 将爬取的新的 url 添加到未爬取队列
4 '''
5 # 校验 url 是否为 None
6 if url is None:
7 # 返回 False
8 return False
9 # 校验 url 是否已经存在在已经爬取或未被爬取的集合
10 elif url not in self.queue and url not in self.set:
11 # 若不存在时,则将该条新的 url 添加到未被爬取的队列中
12 self.queue.append(url)
13 # 返回 True
14 return True
3、获取一条 url 进行下一次爬虫
1def get_nocrawl_url(self):
2 '''
3 :return: 获取一个未爬取的 url
4 '''
5 # 取出一个没有爬取的 url
6 nocrawl_url = self.queue.popleft()
7 # 将未爬取的 url 添加到已经爬取的 url 集合中
8 self.set.add(nocrawl_url)
9 return nocrawl_url
4、获取未爬取或已经爬取的 url 长度
1def get_nocrawl_size(self):
2 '''
3 :return: 获取待爬取的队列长度
4 '''
5 nocrawl_size = len(self.queue)
6 return nocrawl_size
7
8def get_crawl_size(self):
9 '''
10 :return: 获取已爬取的集合长度
11 '''
12 crawl_size = len(self.set)
13 return crawl_size
14
15def is_nocrawl(self):
16 '''
17 :return: 是否存在未爬取的 url
18 '''
19 if self.get_nocrawl_size() <= 0:
20 return False
21 else:
22 return True
实力的提升是最重要的,进入公众号回复:“python计算题”,领取100道 python 案例计算题、快去领取刷题吧~
更多精彩前往微信公众号【Python 集中营】,关注获取《python 从入门到精通全套视频》