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学习笔记 下载
Feb 10 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python实现的个人所得税计算器示例
Jun 01 Python
Python Grid使用和布局详解
Jun 30 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
python中np是做什么的
Jul 21 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 Python
python tqdm用法及实例详解
Jun 16 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工作原理
2020/12/11 PHP
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
Python将一个Excel拆分为多个Excel
2018/11/07 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python实现共轭梯度法
2019/07/03 Python
在django view中给form传入参数的例子
2019/07/19 Python
python爬虫增加访问量的方法
2019/08/22 Python
使用python turtle画高达
2020/01/19 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
公司成立感言
2014/01/11 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
初中思品教学反思
2016/02/20 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang