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 13 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
python实现员工管理系统
Jan 11 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
基于pycharm实现批量修改变量名
Jun 02 Python
用python-webdriver实现自动填表的示例代码
Jan 13 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截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
PHP强制转化的形式整理
2020/05/22 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
python中list循环语句用法实例
2014/11/10 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python导入模块交叉引用的方法
2019/01/19 Python
python贪吃蛇游戏代码
2020/04/18 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
如何给Python代码进行加密
2020/01/10 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
汽车销售求职自荐信
2013/10/01 职场文书
职工运动会邀请函
2014/02/02 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
合作投资意向书
2014/04/01 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
小学推普周活动总结
2015/05/07 职场文书
博士论文答辩开场白
2015/06/01 职场文书
摘录式读书笔记
2015/07/01 职场文书
python在package下继续嵌套一个package
2022/04/14 Python