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使用post提交数据到远程url的方法
Apr 29 Python
Python字符串格式化
Jun 15 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
django 外键创建注意事项说明
May 20 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
一篇文章弄懂Python中的内建函数
Aug 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设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
小议Javascript中的this指针
2010/03/18 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
详解Python装饰器
2019/03/25 Python
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
北京SQL新华信咨询
2016/09/30 面试题
如何理解委托
2012/01/06 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
环境工程求职简历的自我评价范文
2013/10/24 职场文书
xxx同志考察材料
2014/02/07 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
入党培养人考察意见
2015/06/08 职场文书
初中毕业感言300字
2015/07/31 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android