这篇文章将为大家详细讲解有关如何正确的使用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爬虫调度器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。