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改变日志(logging)存放位置的示例
Mar 27 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
pandas删除指定行详解
Apr 04 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
python基础之匿名函数详解
Apr 21 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 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抓取页面的几种方法详解
2013/06/17 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
php实现session共享的实例方法
2019/09/19 PHP
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
JavaScript函数详解
2015/02/27 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
Mac下安装vue
2018/04/11 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
Python splitlines使用技巧
2008/09/06 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python松散正则表达式用法分析
2016/04/29 Python
图文详解WinPE下安装Python
2016/05/17 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
SQL数据库笔试题
2016/03/08 面试题
餐饮收银员岗位职责
2014/02/07 职场文书
教师师德反思材料
2014/02/15 职场文书
出差报告范文
2014/11/06 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
社区党务工作总结2015
2015/05/19 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL