返回介绍

6.6 爬虫调度器

发布于 2024-01-26 22:39:51 字数 1782 浏览 0 评论 0 收藏 0

以上几节已经对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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文