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的Django框架中manage命令的使用与扩展
Apr 11 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
Python配置pip国内镜像源的实现
Aug 20 Python
详解Pymongo常用查询方法总结
Jan 29 Python
详解Python牛顿插值法
May 11 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中的session安全吗?
2016/01/22 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
Python利用ansible分发处理任务
2015/08/04 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python读取word文本操作详解
2018/01/22 Python
django缓存配置的几种方法详解
2018/07/16 Python
Python理解递归的方法总结
2019/01/28 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
《最后的姿势》教学反思
2014/02/27 职场文书
四年级评语大全
2014/04/21 职场文书
婚礼答谢礼品
2015/01/20 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
python如何进行基准测试
2021/04/26 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏