python爬虫模块URL管理器模块用法解析

 更新时间:2020年02月03日 09:37:19   作者:一起来学python  
这篇文章主要介绍了python爬虫模块URL管理器模块用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Pytorch使用卷积神经网络对CIFAR10图片进行分类方式

    Pytorch使用卷积神经网络对CIFAR10图片进行分类方式

    这篇文章主要介绍了Pytorch使用卷积神经网络对CIFAR10图片进行分类方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python学习笔记之While循环用法分析

    Python学习笔记之While循环用法分析

    这篇文章主要介绍了Python学习笔记之While循环用法,结合具体实例形式分析了while循环的原理、用法及相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • 关于DataFrame数据的查询和编辑

    关于DataFrame数据的查询和编辑

    在使用pandas处理DataFrame时,可通过列索引标签获取列数据,行数据的获取可以利用行索引或位置切片,如iloc和loc方法,增加数据时,可通过append方法增加行,直接赋值增加列,删除数据则通过drop方法,通过设置axis参数确定是删除行还是列
    2024-09-09
  • Python实现list反转实例汇总

    Python实现list反转实例汇总

    这篇文章主要介绍了Python实现list反转的方法,实例总结了关于list的各种较为常见的操作技巧,需要的朋友可以参考下
    2014-11-11
  • Python matplotlib绘制实时数据动画

    Python matplotlib绘制实时数据动画

    Matplotlib作为Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。本文将利用Matplotlib库绘制实时数据动画,感兴趣的可以了解一下
    2022-03-03
  • Python+OpenCV图片局部区域像素值处理改进版详解

    Python+OpenCV图片局部区域像素值处理改进版详解

    这篇文章主要为大家详细介绍了Python+OpenCV图片局部区域像素值处理的改进版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python文件基本操作open函数应用与示例详解

    Python文件基本操作open函数应用与示例详解

    这篇文章主要为大家介绍了Python文件基本操作open函数应用与示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • pandas重复行删除操作df.drop_duplicates和df.duplicated的区别

    pandas重复行删除操作df.drop_duplicates和df.duplicated的区别

    本文主要介绍了pandas重复行删除操作df.drop_duplicates和df.duplicated的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python中的sorted函数应用及文件操作详解

    Python中的sorted函数应用及文件操作详解

    这篇文章主要介绍了Python中的sorted函数应用及文件操作详解,python只能将字符串写入到文本文件,要将数值数据存储到文本本件中,必须先试用函数str()将其转换为字符串格式,需要的朋友可以参考下
    2023-12-12
  • Python使用PyQt5实现中英文切换功能

    Python使用PyQt5实现中英文切换功能

    在Python中使用PyQt5实现应用程序的中英文切换功能,可以通过国际化(i18n)和本地化(l10n)的技术来实现,以下是一个详细的教程,包括UI界面多语言切换和程序内部字符串多语言切换两部分,需要的朋友可以参考下
    2024-12-12

最新评论