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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
初步剖析C语言编程中的结构体
Jan 16 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python unittest单元测试框架总结
Sep 08 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Python如何实现爬取B站视频
May 20 Python
如何表示python中的相对路径
Jul 08 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 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
Laravel 框架返回状态拦截代码
2019/10/18 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
Python计算回文数的方法
2015/03/11 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
大专学生推荐信范文
2013/11/19 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
SpringRetry重试框架的具体使用
2021/07/25 Java/Android