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中类的一些方法分析
Sep 25 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
python Django批量导入数据
Mar 25 Python
Python环境变量设置方法
Aug 28 Python
python实现教务管理系统
Mar 12 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
Python reversed函数及使用方法解析
Mar 17 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
python连接mysql有哪些方法
Jun 24 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
php提高网站效率的技巧
2015/09/29 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
PHP7 其他修改
2021/03/09 PHP
Javascript this指针
2009/07/30 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
python检测远程端口是否打开的方法
2015/03/14 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python实现局域网内实时通信代码
2019/12/22 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
哪些情况下不应该使用索引
2015/07/20 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
大学生自我鉴定范文模板
2014/01/21 职场文书
征兵宣传标语
2014/06/20 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
公司人事任命通知
2015/04/20 职场文书
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server