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中的集合类型操作符
Aug 19 Python
Python ldap实现登录实例代码
Sep 30 Python
Python字符串处理实例详解
May 18 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
关于Python使用turtle库画任意图的问题
Apr 01 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读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
jQuery 技巧小结
2010/04/02 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
vue实现图片上传功能
2020/05/28 Javascript
Python中replace方法实例分析
2014/08/20 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
python requests post多层字典的方法
2018/12/27 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
如何在python中实现线性回归
2020/08/10 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
贷款担保书范文
2014/05/13 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
2015公司年度工作总结
2015/05/14 职场文书
2016元旦晚会主持词
2015/07/01 职场文书