python爬虫调度器用法及实例代码
作者:小妮浅浅 发布时间:2023-02-15 08:54:21
我们一般使用爬虫看到的都是最后的数据结果,对于整个的获取过程没有过多了解过。对于初学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()
从整个循环的流程我们可以看出,由爬虫调度器指挥四个元件完成数据的抓取、筛选、保存流程,并以此为基础还可以进行新的循环。看懂原理之后,我们就可以使用以上的代码进行实战啦。
来源:https://www.py.cn/jishu/jichu/21397.html


猜你喜欢
- 下面介绍在Linux上利用python获取本机ip的方法.经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用pyt
- pytorch里面的maxpool,有一个属性叫ceil_mode,这个属性在api里面的解释是ceil_mode: when True,
- 有时候使用到获取本机IP,就采用以下方式进行。#!/usr/bin/python import socketimport stru
- 2018年1月3日,王思聪被迫动用自己的微博,为一个诞生不到10天的App打了广告,“每天我都发奖金,今晚9点就发10万”。对他而言,这天的
- Python 直接连接mongodb数据库进行查询操作1、安装所需模块使用到的是pymongo模块,安装方法:pip instal
- 有很多对于PHP的抱怨,甚至这些抱怨也出自很多聪明的人。当Jeff Atwood写下对于PHP的另一篇抱怨文章之后,我思考了下PHP的好的方
- 本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作。首先,我们来明确一下本文的具体需求。现有一个
- 编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个
- 不加的话貌似只在ie6出现过问题。出现过:改变图片地址,结果图片不见了,加载样式,但样式文件没了。就像是中断了资源的下载一样,正确时解释是
- 备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword databasename &
- 判断函数如下:Public Function CheckBIG(strSource As String) As BooleanDim idx
- function getExplorerInfo() { var explorer = window.navigator.user
- 使用xmlhttp中的getResponseHeader 从响应信息中获取指定的http头strValue = oXML
- 对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式。因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些
- 1. OS标准库简介顾名思义,OS表示Operating System,即操作系统。OS标准库是一个操作系统接口模块,提供一些方便使用操作系
- 一个对AJAX的封装//url就是请求的地址//successFunc就是一个请求返回成功之后的一个function,有一个参数,参数就是服
- 我们的浏览器访问网站时,默认为发送了一个HTTP的GET请求。在浏览网站时,会经常填写表单,比如填写用户名密码。点击登录后,会跳转到我们的主
- 前言其实Python使用QQ邮箱发送Email代码很简单,短短几行代码就可以实现这个功能。使用到的模块有smtplib和email这个两个模
- 最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。其中传的参数data中前面几个json数据是
- 获取节点的两种方式: 1、通过event对象的srcElement属性; &nbs