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下载文件时显示下载进度的方法
Apr 02 Python
python中enumerate函数用法实例分析
May 20 Python
Python中列表的一些基本操作知识汇总
May 20 Python
python爬虫基本知识
Mar 05 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
Python csv文件的读写操作实例详解
Nov 19 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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
杏林同学录(九)
2006/10/09 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
Javascript实现时间倒计时效果
2017/07/15 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
python实现xml转json文件的示例代码
2020/12/30 Python
python中remove函数的踩坑记录
2021/01/04 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
行政助理的职责
2013/11/14 职场文书
房地产员工找工作的自我评价
2013/11/15 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
个人主要事迹材料
2014/08/26 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
如何在Python中创建二叉树
2021/03/30 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
vue 给数组添加新对象并赋值
2022/04/20 Vue.js