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框架代码的一些示例
Apr 20 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
python和ruby,我选谁?
Sep 13 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
python机器人运动范围问题的解答
Apr 29 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
pandas取出重复数据的方法
Jul 04 Python
Python中qutip用法示例详解
Oct 02 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模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
phpfpm的作用和用法
2019/10/10 PHP
javascript 短路法代码精简
2009/08/20 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
详解python 注释、变量、类型
2018/08/10 Python
python梯度下降法的简单示例
2018/08/31 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
实习会计求职自荐信范文
2014/03/10 职场文书
合作意向书格式及范文
2014/03/31 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python