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)

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

相关文章

  • win10下python3.8的PIL库安装过程

    win10下python3.8的PIL库安装过程

    这篇文章主要介绍了win10下python3.8的PIL库安装方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 如何在Django中使用聚合的实现示例

    如何在Django中使用聚合的实现示例

    这篇文章主要介绍了如何在Django中使用聚合的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Django rest framework jwt的使用方法详解

    Django rest framework jwt的使用方法详解

    这篇文章主要介绍了Django rest framework jwt的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 基于Python安装pyecharts所遇的问题及解决方法

    基于Python安装pyecharts所遇的问题及解决方法

    今天小编就为大家分享一篇基于Python安装pyecharts所遇的问题及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 基于OpenCV python3实现证件照换背景的方法

    基于OpenCV python3实现证件照换背景的方法

    这篇文章主要介绍了基于OpenCV python3实现证件照换背景的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • pandas实现一行拆分成多行

    pandas实现一行拆分成多行

    这篇文章主要介绍了pandas实现一行拆分成多行方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 详解Selenium+PhantomJS+python简单实现爬虫的功能

    详解Selenium+PhantomJS+python简单实现爬虫的功能

    这篇文章主要介绍了详解Selenium+PhantomJS+python简单实现爬虫的功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 对pytorch网络层结构的数组化详解

    对pytorch网络层结构的数组化详解

    今天小编就为大家分享一篇对pytorch网络层结构的数组化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)

    这篇文章主要介绍了使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python正则抓取新闻标题和链接的方法示例

    Python正则抓取新闻标题和链接的方法示例

    这篇文章主要介绍了Python正则抓取新闻标题和链接的方法,结合具体实例形式分析了Python正则匹配页面元素及文件写入相关操作技巧,需要的朋友可以参考下
    2017-04-04

最新评论