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简单获取本机计算机名和IP地址的方法
Jun 03 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
python模拟Django框架实例
May 17 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Python的装饰器使用详解
Jun 26 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Python Lambda函数使用总结详解
Dec 11 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
python3.7添加dlib模块的方法
Jul 01 Python
Django restful framework生成API文档过程详解
Nov 12 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代码收集表单内容并写入文件的代码
2012/01/29 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
原生JS实现天气预报
2020/06/16 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
python处理html转义字符的方法详解
2016/07/01 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
销售主管岗位职责
2014/02/08 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
红色经典观后感
2015/06/18 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
spring cloud 配置中心native配置方式
2021/09/25 Java/Android