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 相关文章推荐
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
python中的变量如何开辟内存
Jun 26 Python
python如何创建TCP服务端和客户端
Aug 26 Python
python flask解析json数据不完整的解决方法
May 26 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python银行系统实战源码
Oct 25 Python
Python读取实时数据流示例
Dec 02 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
python单例模式的应用场景实例讲解
Feb 24 Python
python绘制云雨图raincloud plot
Aug 05 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网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
菜单效果
2006/10/14 Javascript
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
Python导入oracle数据的方法
2015/07/10 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python selenium firefox使用详解
2019/02/26 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
大学军训自我鉴定
2013/12/15 职场文书
化妆品店促销方案
2014/02/24 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
党员作风建设自查报告
2014/10/23 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
解除同居协议书
2015/01/29 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Nginx配置https的实现
2021/11/27 Servers
Java设计模式之代理模式
2022/04/22 Java/Android