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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
python学生管理系统开发
Jan 30 Python
python自动化之Ansible的安装教程
Jun 13 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
Python3如何判断三角形的类型
Apr 12 Python
python3中sys.argv的实例用法
Apr 24 Python
详解Python自动化之文件自动化处理
Jun 21 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简洁函数小结
2011/08/12 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
一个javascript参数的小问题
2008/03/02 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
python算法学习之计数排序实例
2013/12/18 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
用Python抢过年的火车票附源码
2015/12/07 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
python 爬取小说并下载的示例
2020/12/07 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
Android面试题及答案
2015/09/04 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
公益广告语集锦
2014/03/13 职场文书
公司寄语大全
2014/04/10 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
超市工作总结范文2014
2014/12/19 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Win11查看设备管理器
2022/04/19 数码科技