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网络编程实例简析
Sep 26 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
详解python 爬取12306验证码
May 10 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
用python制作个音乐下载器
Jan 30 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 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连接Access数据库的方法小结
2013/06/20 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python实现的解析crontab配置文件代码
2014/06/30 Python
记录Django开发心得
2014/07/16 Python
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
快速查询Python文档方法分享
2017/12/27 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
python迭代器常见用法实例分析
2019/11/22 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
Python实现SMTP邮件发送
2020/06/16 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
车间操作工岗位职责
2013/12/19 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
家长对老师的感言
2014/03/11 职场文书
java实现对Hadoop的操作
2021/07/01 Java/Android
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL