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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
Python+Wordpress制作小说站
Apr 14 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
python实现猜拳游戏
Mar 04 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
pandas中DataFrame检测重复值的实现
May 26 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(一)
2012/03/21 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
php的4种常见运行方式
2015/03/20 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js的写法基础分析
2011/01/17 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python中if嵌套命令实例讲解
2021/02/25 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
荟萃全球保健品:维他购
2018/05/09 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
Python如何实现单例模式
2016/06/03 面试题
2015年小学体育工作总结
2015/05/22 职场文书
停发工资证明范本
2015/06/12 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书