文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.6 爬虫调度器
以上几节已经对URL管理器、HTML下载器、HTML解析器和数据存储器等模块进行了实现,接下来编写爬虫调度器以协调管理这些模块。爬虫调度器首先要做的是初始化各个模块,然后通过crawl(root_url)方法传入入口URL,方法内部实现按照运行流程控制各个模块的工作。爬虫调度器SpiderMan.py的程序如下:
# coding:utf-8 from firstSpider.DataOutput import DataOutput from firstSpider.HtmlDownloader import HtmlDownloader from firstSpider.HtmlParser import HtmlParser from firstSpider.UrlManager import UrlManager class SpiderMan(object): def __init__(self): self.manager = UrlManager() self.downloader = HtmlDownloader() self.parser = HtmlParser() self.output = DataOutput() def crawl(self,root_url): # 添加入口URL self.manager.add_new_url(root_url) # 判断url管理器中是否有新的url,同时判断抓取了多少个url while(self.manager.has_new_url() and self.manager.old_url_size()<100): try: # 从URL管理器获取新的url new_url = self.manager.get_new_url() # HTML下载器下载网页 html = self.downloader.download(new_url) # HTML解析器抽取网页数据 new_urls,data = self.parser.parser(new_url,html) # 将抽取的url添加到URL管理器中 self.manager.add_new_urls(new_urls) # 数据存储器存储文件 self.output.store_data(data) print "已经抓取%s个链接"%self.manager.old_url_size() except Exception,e: print "crawl failed" # 数据存储器将文件输出成指定格式 self.output.output_html() if __name__=="__main__": spider_man = SpiderMan() spider_man.crawl("http://baike.baidu.com/view/284853.htm")
到这里基础爬虫架构所需的模块都已经完成,启动程序,大约1分钟左右,数据都被存储为baike.html。使用浏览器打开,效果如图6-5所示。
图6-5 baike.html
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论