python爬虫模块URL管理器模块用法解析


Posted in Python onFebruary 03, 2020

这篇文章主要介绍了python爬虫模块URL管理器模块用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

URL管理器模块

一般是用来维护爬取的url和未爬取的url已经新添加的url的,如果队列中已经存在了当前爬取的url了就不需要再重复爬取了,另外防止造成一个死循环。举个例子

我爬www.baidu.com 其中我抓取的列表中有music.baidu.om,然后我再继续抓取该页面的所有链接,但是其中含有www.baidu.com,可以想象如果不做处理的话就成了一个死循环了,在百度首页和百度音乐页循环,所以有一个对列来维护URL是很重要的。

下面以python代码实现为例,使用的deque双向队列方便取出以前的url。

from collections import deque
class URLQueue():
  def __init__(self):
    self.queue = deque() # 待抓取的网页
    self.visited = set() # 已经抓取过的网页
 
  def new_url_size(self):
    '''''
    获取未爬取URL集合的大小
    :return: 
    '''
    return len(self.queue)
 
  def old_url_size(self):
    '''''
    获取已爬取URL的大小
    :return: 
    '''
    return len(self.visited)
 
  def has_new_url(self):
    '''''
    判断是否有未爬取的URL
    :return: 
    '''
    return self.new_url_size() != 0
 
  def get_new_url(self):
    '''''
    获取一个未爬取的URL
    :return: 
    '''
    new_url = self.queue.popleft()#从左侧取出一个链接
    self.old_urls.add(new_url)#记录已经抓取
    return new_url
 
  def add_new_url(self, url):
    '''''
    将新的URL添加到未爬取的URL集合
    :param url: 单个url
    :return: 
    '''
    if url is None:
      return False
    if url not in self.new_urls and url not in self.old_urls:
      self.new_urls.append(url)
 
  def add_new_urls(self, urlset):
    '''''
    将新的URL添加到未爬取的URL集合
    :param urlset: url集合
    :return: 
    '''
    if urlset is None or len(urlset) == 0:
      return
    for url in urlset:
       self.add_new_url(url)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python数组遍历的简单实现方法小结
Apr 27 Python
Python正则捕获操作示例
Aug 19 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python线性回归实战分析
Feb 01 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
python实现从ftp服务器下载文件
Mar 03 Python
Django如何批量创建Model
Sep 01 Python
python中函数返回多个结果的实例方法
Dec 16 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
Tensorflow实现多GPU并行方式
Feb 03 #Python
python如何通过twisted搭建socket服务
Feb 03 #Python
关于Tensorflow分布式并行策略
Feb 03 #Python
基于python修改srt字幕的时间轴
Feb 03 #Python
Python实现不规则图形填充的思路
Feb 02 #Python
Python ORM编程基础示例
Feb 02 #Python
Python 面向对象之类class和对象基本用法示例
Feb 02 #Python
You might like
谈谈关于php的优点与缺点
2013/04/11 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
对dataframe进行列相加,行相加的实例
2018/06/08 Python
实践Vim配置python开发环境
2018/07/02 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Python内存映射文件读写方式
2020/04/24 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
前台接待员岗位职责
2014/01/02 职场文书
顶岗实习计划书
2014/01/10 职场文书
仓库管理制度
2014/01/21 职场文书
水电站项目建议书
2014/05/12 职场文书
横店影视城导游词
2015/02/06 职场文书
前台接待员岗位职责
2015/04/15 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书