返回介绍

6.2 URL 管理器

发布于 2024-01-26 22:39:51 字数 1824 浏览 0 评论 0 收藏 0

URL管理器主要包括两个变量,一个是已爬取URL的集合,另一个是未爬取URL的集合。采用Python中的set类型,主要是使用set的去重复功能,防止链接重复爬取,因为爬取链接重复时容易造成死循环。链接去重复在Python爬虫开发中是必备的功能,解决方案主要有三种:1)内存去重2)关系数据库去重3)缓存数据库去重。大型成熟的爬虫基本上采用缓存数据库的去重方案,尽可能避免内存大小的限制,又比关系型数据库去重性能高很多。由于基础爬虫的爬取数量较小,因此我们使用Python中set这个内存去重方式。

URL管理器除了具有两个URL集合,还需要提供以下接口,用于配合其他模块使用,接口如下:

·判断是否有待取的URL,方法定义为has_new_url()。

·添加新的URL到未爬取集合中,方法定义为add_new_url(url),add_new_urls(urls)。

·获取一个未爬取的URL,方法定义为get_new_url()。

·获取未爬取URL集合的大小,方法定义为new_url_size()。

·获取已经爬取的URL集合的大小,方法定义为old_url_size()。

程序URLManager.py的完整代码如下:

  # coding:utf-8
  class UrlManager(object):
     def __init__(self):
       self.new_urls = set()# 未爬取URL集合
       self.old_urls = set()# 已爬取URL集合
  
     def has_new_url(self):
       '''
       判断是否有未爬取的URL
       :return:
       '''
       return self.new_url_size()!=0
  
     def get_new_url(self):
       '''
       获取一个未爬取的URL
       :return:
       '''
       new_url = self.new_urls.pop()
       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
       if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)
  
     def add_new_urls(self,urls):
       '''
       将新的URL添加到未爬取的URL集合中
       :param urls:url集合
       :return:
       '''
       if urls is None or len(urls)==0:
            return
       for url in urls:
            self.add_new_url(url)
  
     def new_url_size(self):
       '''
       获取未爬取URL集合的大小
       :return:
       '''
       return len(self.new_urls)
  
     def old_url_size(self):
       '''
       获取已经爬取URL集合的大小
       :return:
       '''
       return len(self.old_urls)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文