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 02 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
python简单商城购物车实例代码
Mar 15 Python
对python 中class与变量的使用方法详解
Jun 26 Python
python生成随机红包的实例写法
Sep 02 Python
python实现一个猜拳游戏
Apr 05 Python
Python如何脚本过滤文件中的注释
May 27 Python
python的flask框架难学吗
Jul 31 Python
python 数据类型强制转换的总结
Jan 25 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
短波的认识
2021/03/01 无线电
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python多进程同步简单实现代码
2016/04/27 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
华为c/c++笔试题
2016/01/25 面试题
大宝sod蜜广告词
2014/03/21 职场文书
标准版离职证明书
2014/09/12 职场文书
端午节寄语2015
2015/03/23 职场文书
初中家长意见
2015/06/03 职场文书
Django程序的优化技巧
2021/04/29 Python
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
JVM之方法返回地址详解
2022/02/28 Java/Android
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python