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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
Python操作列表的常用方法分享
Feb 13 Python
Python下的twisted框架入门指引
Apr 15 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
Python数据类型之List列表实例详解
May 08 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
用Python进行websocket接口测试
Oct 16 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
Python中的xlrd模块使用整理
Jun 15 Python
关于 Python json中load和loads区别
Nov 07 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
AngularJS快速入门
2015/04/02 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
Python字符串匹配算法KMP实例
2015/07/18 Python
python opencv之SURF算法示例
2018/02/24 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
产品开发计划书
2014/04/27 职场文书
养成教育经验材料
2014/05/26 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书