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使用wmi模块获取windows下硬盘信息的方法
May 15 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
python dlib人脸识别代码实例
Apr 04 Python
TensorFLow 变量命名空间实例
Feb 11 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
Python基于execjs运行js过程解析
Nov 27 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 Python
Python打包exe时各种异常处理方案总结
May 18 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连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
快速了解Python相对导入
2018/01/12 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
python ETL工具 pyetl
2020/06/07 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
师范大学音乐表演专业求职信
2013/10/23 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
python分分钟绘制精美地图海报
2022/02/15 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js