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获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
Python实现的多线程http压力测试代码
Feb 08 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
python统计多维数组的行数和列数实例
Jun 23 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python Pandas数据结构简单介绍
Jul 03 Python
Python中pymysql 模块的使用详解
Aug 12 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
Python 统计位数为偶数的数字代码详解
Mar 15 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文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
实现动画效果核心方式的js代码
2013/09/27 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python中的global关键字的使用方法
2019/08/20 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
css3中transition属性详解
2014/09/02 HTML / CSS
eBay奥地利站:eBay.at
2019/07/24 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
教师自荐信范文
2013/12/09 职场文书
大学军训通讯稿
2014/01/13 职场文书
绿色出行口号
2014/06/18 职场文书
调研座谈会发言材料
2014/08/23 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
初中美术教学反思
2016/02/17 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android