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 相关文章推荐
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
python爬取网页转换为PDF文件
Jun 07 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
python绘制直方图和密度图的实例
Jul 08 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python有参函数使用代码实例
Jan 06 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
如何用python写个模板引擎
Jan 14 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
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
python logging日志模块的详解
2017/10/29 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python支付宝支付示例详解
2019/08/22 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
部队领导证婚词
2014/01/12 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
会计主管岗位职责
2015/04/02 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL