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在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
基于django传递数据到后端的例子
Aug 16 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
python制作抽奖程序代码详解
Jan 15 Python
Python 中的Sympy详细使用
Aug 07 Python
python的html标准库
Apr 29 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 session 预定义数组
2009/03/16 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
header跳转和include包含问题详解
2012/09/08 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
一个超级简单的python web程序
2014/09/11 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
爱岗敬业演讲稿范文
2014/01/14 职场文书
通信生自我鉴定
2014/01/18 职场文书
优秀企业获奖感言
2014/02/01 职场文书
分公司负责人任命书
2014/06/04 职场文书
个人作风建设心得体会
2014/10/22 职场文书
退学证明范本3篇
2014/10/29 职场文书
2015年母亲节寄语
2015/03/23 职场文书
运动会新闻稿
2015/07/17 职场文书