认识爬虫:怎样管理爬虫过程中已使用和未使用的 URL 地址?

URL 管理器是爬虫过程中重要的一环,使用它来管理在爬虫过程中众多的 URL 地址以免造成重复获取爬虫地址、爬虫 陷入死循环等情况的发生。比如,我们要根据 baidu.com 来进行爬虫,如果在爬虫的子页面中也包含 baidu.com 不做处理的话就会陷入循环,所以说,在爬虫过程中对 URL 进行很好的维护是非常重要的。

前往 >> 【阅读全文】

1、创建 url 管理对象及属性定义

1# 导入队列

2fromcollectionsimportdeque

3

4# 定义 url 管理器类

5classurl_queue():

6def__init__(self):

7# 定义待爬取的队列

8self.queue = deque()

9# 定义已经爬取的集合,使用 set 集合保证去重

10self.set = set()

2、将页面上获取到的 url 添加到没有爬取的队列

1defadd_nocrawl_url(self,url):

2'''

3:return: 将爬取的新的 url 添加到未爬取队列

4'''

5# 校验 url 是否为 None

6ifurlisNone:

7# 返回 False

8returnFalse

9# 校验 url 是否已经存在在已经爬取或未被爬取的集合

10elifurlnotinself.queueandurlnotinself.set:

11# 若不存在时,则将该条新的 url 添加到未被爬取的队列中

12self.queue.append(url)

13# 返回 True

14returnTrue

3、获取一条 url 进行下一次爬虫

1defget_nocrawl_url(self):

2'''

3:return: 获取一个未爬取的 url

4'''

5# 取出一个没有爬取的 url

6nocrawl_url = self.queue.popleft()

7# 将未爬取的 url 添加到已经爬取的 url 集合中

8self.set.add(nocrawl_url)

9returnnocrawl_url

4、获取未爬取或已经爬取的 url 长度

1defget_nocrawl_size(self):

2'''

3:return: 获取待爬取的队列长度

4'''

5nocrawl_size = len(self.queue)

6returnnocrawl_size

7

8defget_crawl_size(self):

9'''

10:return: 获取已爬取的集合长度

11'''

12crawl_size = len(self.set)

13returncrawl_size

14

15defis_nocrawl(self):

16'''

17:return: 是否存在未爬取的 url

18'''

19ifself.get_nocrawl_size() <=0:

20returnFalse

21else:

22returnTrue

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容