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实现拼接多张图片的方法
Dec 01 Python
git进行版本控制心得详谈
Dec 10 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Django开发中复选框用法示例
Mar 20 Python
python实现简单登陆流程的方法
Apr 22 Python
利用Python如何批量更新服务器文件
Jul 29 Python
django连接mysql配置方法总结(推荐)
Aug 18 Python
python样条插值的实现代码
Dec 17 Python
python安装pil库方法及代码
Jun 25 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 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绘制一条弧线的方法
2015/01/24 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
JS工厂模式开发实践案例分析
2019/10/17 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
Python二分查找详解
2015/09/13 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
python实现录音小程序
2020/10/26 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
工程项目经理任命书
2014/06/05 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
学校施工安全责任书
2015/01/29 职场文书
会议通知格式范文
2015/04/15 职场文书
红色革命电影观后感
2015/06/18 职场文书
羊脂球读书笔记
2015/06/30 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
Python中Permission denied的解决方案
2021/04/02 Python
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
python 如何获取页面所有a标签下href的值
2021/05/06 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript