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与js)两种实现
Feb 21 Python
给Python IDLE加上自动补全和历史功能
Nov 30 Python
Python中操作文件之write()方法的使用教程
May 25 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python 对象和json互相转换方法
Mar 22 Python
python中正则表达式与模式匹配
May 07 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
Python小白垃圾回收机制入门
Jun 09 Python
Python基于xlutils修改表格内容过程解析
Jul 28 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之第四天
2006/10/09 PHP
在PWS上安装PHP4.0正式版
2006/10/09 PHP
第十五节--Zend引擎的发展
2006/11/16 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
Prototype Function对象 学习
2009/07/12 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
python中实现词云图的示例
2020/12/19 Python
幼儿园保教管理制度
2014/02/03 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
学生检讨书怎么写
2015/05/07 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
Redis如何实现分布式锁
2021/08/23 Redis
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技