python爬虫调度器用法及实例代码


Posted in Python onNovember 30, 2020

我们一般使用爬虫看到的都是最后的数据结果,对于整个的获取过程没有过多了解过。对于初学python的小伙伴们来说,不光是代码的练习,还是原理的分析都是必不可少的。

小编把整个爬取的过程分为了几个部分,从一开始的下载,到数据的去重解析,再到整个爬虫循环的结束,以图片和代码的双重形式展现给大家,希望能够对爬虫调度器有一个深刻的理解。

我们可以编写几个元件,每个元件完成一项功能,下图中的蓝底白字就是对这一流程的抽象:

python爬虫调度器用法及实例代码

  • UrlManager:将存储和获取url以及url去重的几个步骤在url管理器中完成(当然也可以针对每一步分别编写相应的函数,但是这样更直观)。url管理器要有两个url仓库,一个存储未爬取的url,一个存储已爬取的url,除了仓库之外,还应该具有一些完成特定功能的函数,如存储url、url去重、从仓库中挑选并返回一个url等
  • HtmlDownloader:将下载网页内容的功能在HTML下载器中完成,下载器的功能较为单一,不多解释。但从整个爬虫的角度上来说,下载器是爬虫的核心,在实际操作的过程中,下载器要和目标网站的各种反爬虫手段斗智斗勇(各种表单、隐藏字段和假链接、验证码、IP限制等等),这也是最耗费大脑的步骤
  • HtmlParser:解析提取数据的功能在HTML解析器中完成,解析器内的函数应该分别具有返回数据和新url的功能
  • DAtaOutput:存储数据的功能由数据存储器完成
  • SpiderMan:主循环由爬虫调度器来完成,调度器为整个程序的入口,将其余四个元件有序执行

爬虫调度器将要完成整个循环,下面写出python下爬虫调度器的程序:

# coding: utf-8
new_urls = set()
data = {}
class SpiderMan(object):
 def __init__(self):
  #调度器内包含其它四个元件,在初始化调度器的时候也要建立四个元件对象的实例
  self.manager = UrlManager()
  self.downloader = HtmlDownloader()
  self.parser = HtmlParser()
  self.output = DataOutput()
 def spider(self, origin_url):
  #添加初始url
  self.manager.add_new_url(origin_url)
  #下面进入主循环,暂定爬取页面总数小于100
  num = 0
  while(self.manager.has_new_url() and self.manager.old_url_size()<100):
   try:
    num = num + 1
    print "正在处理第{}个链接".format(num)
    #从新url仓库中获取url
    new_url = self.manager.get_new_url()
    #调用html下载器下载页面
    html = self.downloader.download(new_url)
    #调用解析器解析页面,返回新的url和data
    try:
     new_urls, data = self.parser.parser(new_url, html)
    except Exception, e:
     print e
    for url in new_urls:
     self.manager.add_new_url(url)
    #将已经爬取过的这个url添加至老url仓库中
    self.manager.add_old_url(new_url)
    #将返回的数据存储至文件
     self.output.store_data(data)
     print "store data succefully"
    print "第{}个链接已经抓取完成".format(self.manager.old_url_size())
   except Exception, e:
    print e
  #爬取循环结束的时候将存储的数据输出至文件
  self.output.output_html()

从整个循环的流程我们可以看出,由爬虫调度器指挥四个元件完成数据的抓取、筛选、保存流程,并以此为基础还可以进行新的循环。看懂原理之后,我们就可以使用以上的代码进行实战啦。

到此这篇关于python爬虫调度器用法及实例代码的文章就介绍到这了,更多相关python爬虫调度器是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python3 shelve模块的详解
Jul 08 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
python实现微信远程控制电脑
Feb 22 Python
Python之list对应元素求和的方法
Jun 28 Python
python二进制文件的转译详解
Jul 03 Python
python实现共轭梯度法
Jul 03 Python
Python中新式类与经典类的区别详析
Jul 10 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
python爬虫中url管理器去重操作实例
Nov 30 #Python
python爬虫中的url下载器用法详解
Nov 30 #Python
Python接口自动化测试框架运行原理及流程
Nov 30 #Python
Django数据模型中on_delete使用详解
Nov 30 #Python
Django数据统计功能count()的使用
Nov 30 #Python
Python常用断言函数实例汇总
Nov 30 #Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 #Python
You might like
linux下为php添加curl扩展的方法
2011/07/29 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python实现udp数据报传输的方法
2014/09/26 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Python实现注册、登录小程序功能
2018/09/21 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
公司领导班子对照材料
2014/08/18 职场文书
投标承诺函范文
2015/01/21 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
婚育证明格式
2015/06/17 职场文书
mysql知识点整理
2021/04/05 MySQL
Redis RDB技术底层原理详解
2021/09/04 Redis
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python