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操作串口的方法
Jun 17 Python
编写Python CGI脚本的教程
Jun 29 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
django框架单表操作之增删改实例分析
Dec 16 Python
PyTorch中topk函数的用法详解
Jan 02 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
Python Numpy之linspace用法说明
Apr 17 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
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python 26进制计算实现方法
2015/05/28 Python
python实现按长宽比缩放图片
2018/06/07 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
python如何从文件读取数据及解析
2019/09/19 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
车辆维修工自我评价怎么写
2013/09/20 职场文书
计算机工程学院个人求职信
2013/10/05 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
班主任工作年限证明
2014/01/12 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
《叶问2》观后感
2015/06/15 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android