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 28 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
详解python中的time和datetime的常用方法
Jul 08 Python
将python安装信息加入注册表的示例
Nov 20 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
基于Python把网站域名解析成ip地址
May 25 Python
Python pip使用超时问题解决方案
Aug 03 Python
Python3读写ini配置文件的示例
Nov 06 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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 日期时间处理函数小结
2009/12/18 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php使用PDO方法详解
2014/12/27 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
JS模板实现方法
2013/04/03 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
vue的toast弹窗组件实例详解
2018/05/14 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
vue实现分页加载效果
2019/12/24 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python对一个数向上取整的实例方法
2020/06/18 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
网上开店必备创业计划书
2014/01/26 职场文书
马智宇结婚主持词
2014/04/01 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
软环境建设心得体会
2014/09/09 职场文书
个人查摆剖析材料
2014/10/16 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
导游词之上海豫园
2019/10/24 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python