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算法学习之基数排序实例
Dec 18 Python
pyqt和pyside开发图形化界面
Jan 22 Python
Python中的choice()方法使用详解
May 15 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python绘制立方体的方法
Jul 02 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python 动态调用函数实例解析
Oct 21 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 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
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
Python类定义和类继承详解
2015/05/08 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Python模块常用四种安装方式
2020/10/20 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
档案接收函范文
2014/01/10 职场文书
个人自我剖析材料
2014/02/07 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
化验员岗位职责
2015/02/14 职场文书
芙蓉镇观后感
2015/06/10 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
六年级作文之自救
2019/12/19 职场文书