python爬虫中url管理器去重操作实例


Posted in Python onNovember 30, 2020

当我们需要有一批货物需要存放时,最好的方法就是有一个仓库进行保管。我们可以把URL管理器看成一个收集了数据的大仓库,而下载器就是这个仓库货物的搬运者。关于下载器的问题,我们暂且不谈。本篇主要讨论的是在url管理器中,我们遇到重复的数据应该如何识别出来,避免像仓库一样过多的囤积相同的货物。听起来是不是很有意思,下面我们一起进入今天的学习。

URL管理器到底应该具有哪些功能?

  • URL下载器应该包含两个仓库,分别存放没有爬取过的链接和已经爬取过的链接。
  • 应该有一些函数负责往上述两个仓库里添加链接
  • 应该有一个函数负责从新url仓库中随机取出一条链接以便下载器爬取
  • URL下载器应该能识别重复的链接,已经爬取过的链接就不需要放进仓库了

python爬虫中url管理器去重操作实例

如果一个URL管理器能够具有以上4点功能,也算是“麻雀虽小,五脏俱全”了。然而,链接去重这个功能,应该怎么实现?

链接去重是关系爬虫效率的一个比较关键的点,尤其是爬取的数据量极大的时候。在这个简单的例子里,由于数据量较少,我们不需要太过复杂的算法,直接借助于python的set()函数即可,该函数可以生成一个集合对象,其元素不可重复。

根据以上分析,URL管理器的w代码如下:

'''
UrlManager
class UrlManager(object):
  def __init__(self):
    #初始化的时候就生成两个url仓库
    self.new_urls = set()
    self.old_urls = set()
  #判断新url仓库中是否还有没有爬取的url
  def has_new_url(self):
    return len(self.new_urls)
  #从new_url仓库获取一个新的url
  def get_new_url(self):
    return self.new_urls.pop()
  def add_new_url(self, url):  #这个函数后来用不到了……
    '''
    将一条url添加到new_urls仓库中
    parm url: str
    return:
    if url is None:
      return
    #只需要判断old_urls中没有该链接即可,new_urls在添加的时候会自动去重
    if url not in self.old_urls:
      self.new_urls.add(url)
  def add_new_urls(self, urls):
    将多条url添加到new_urls仓库中
    parm url: 可迭代对象
    print "start add_new_urls"
    if urls is None or len(urls) == 0:
    for url in urls:
      self.add_new_url(url)
  def add_old_url(self, url):
    self.old_urls.add(url)
    print "add old url succefully"
  #获取已经爬取过的url的数目
  def old_url_size(self):
    return len(self.old_urls)

尝试过以上代码的小伙伴,已经成功学会用url管理器筛选重复的数据了。相信大家经过今天的学习,已经能够了解url的基本功能和简单的使用。

到此这篇关于python爬虫中url管理器去重操作实例的文章就介绍到这了,更多相关python爬虫中url管理器如何去重内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python迭代器的使用方法实例
Nov 21 Python
Python中的CURL PycURL使用例子
Jun 01 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
Python实现分段线性插值
Dec 17 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
浅析Python 条件控制语句
Jul 15 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
如何查看python关键字
Jan 17 Python
详解Python中*args和**kwargs的使用
Apr 07 Python
python爬虫中的url下载器用法详解
Nov 30 #Python
Python接口自动化测试框架运行原理及流程
Nov 30 #Python
Django数据模型中on_delete使用详解
Nov 30 #Python
Django数据统计功能count()的使用
Nov 30 #Python
Python常用断言函数实例汇总
Nov 30 #Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 #Python
Django 用户认证Auth组件的使用
Nov 30 #Python
You might like
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
php生成验证码函数
2015/10/20 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
小小聊天室Python代码实现
2016/08/17 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
医学毕业生自荐信
2013/10/11 职场文书
建筑专业自荐信
2013/10/18 职场文书
竞选演讲稿范文
2013/12/28 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
python基础入门之字典和集合
2021/06/13 Python
python​格式化字符串
2022/04/20 Python