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人人网登录应用实例
Sep 26 Python
Python pandas常用函数详解
Feb 07 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python得到电脑的开机时间方法
Oct 15 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
Python模块汇总(常用第三方库)
Oct 07 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
python离线安装外部依赖包的实现
Feb 13 Python
Python嵌入C/C++进行开发详解
Jun 09 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下过滤HTML代码的函数
2007/12/10 PHP
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
php比较相似字符串的方法
2015/06/05 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python书单 不将就
2017/07/11 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Python语言进阶知识点总结
2019/05/28 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
JAVA程序员面试题
2012/10/03 面试题
电子商务应届生求职信
2013/11/16 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
食品行业求职人的自我评价
2014/01/19 职场文书
文化活动实施方案
2014/03/28 职场文书
美术指导助理求职信
2014/04/20 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
python中%格式表达式实例用法
2021/06/18 Python
python中使用redis用法详解
2022/12/24 Redis