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运行的17个时新手常见错误小结
Aug 07 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
Python多图片合并PDF的方法
Jan 03 Python
python下载微信公众号相关文章
Feb 26 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 29 Python
Python学习笔记之装饰器
Aug 06 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
浅析PHP水印技术
2007/02/14 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
Python松散正则表达式用法分析
2016/04/29 Python
python实现12306火车票查询器
2017/04/20 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python做反被爬保护的方法
2019/07/01 Python
python交易记录整合交易类详解
2019/07/03 Python
Python如何实现动态数组
2019/11/02 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
小学生自我评价100字(15篇)
2014/09/18 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
碧霞祠导游词
2015/02/09 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
四则混合运算教学反思
2016/02/23 职场文书