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实现从百度API获取天气的方法
Mar 11 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
Python3实现腾讯云OCR识别
Nov 27 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
python 内置模块详解
Jan 01 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
Django serializer优化类视图的实现示例
Jul 16 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 登录记住密码实现思路
2013/05/07 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
Python Deque 模块使用详解
2014/07/04 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python中调试或排错的五种方法示例
2019/09/12 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
技校个人求职信范文
2014/01/25 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
法人委托书范本
2014/04/04 职场文书
考博专家推荐信
2014/05/10 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
新学期标语
2014/06/30 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书