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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python操作SQLite简明教程
Jul 10 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Django中信号signals的简单使用方法
Jul 04 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
用Python写一个自动木马程序
Sep 17 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP n个不重复的随机数生成代码
2009/06/23 PHP
php字符串操作常见问题小结
2016/10/11 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
学校七一活动方案
2014/01/19 职场文书
美术指导求职信
2014/03/17 职场文书
献爱心活动总结
2014/05/07 职场文书
预备党员转正考核材料
2014/06/03 职场文书
英语通知范文
2015/04/22 职场文书