python Cmd实例之网络爬虫应用

标签(空格分隔): python Cmd 爬虫


废话少说,直接上代码

  1. # encoding=utf-8
  2. import os
  3. import multiprocessing
  4. from cmd import Cmd
  5. import commands
  6. from mycrawler.dbUtil import DbUtil
  7. import signal
  8. # 下载监控
  9. def run_download_watch():
  10. os.system("gnome-terminal -x bash -c 'python ./download_process.py' ")
  11. # 下载文件
  12. def run_download():
  13. os.system("gnome-terminal -x bash -c 'python ./download.py' ")
  14. # 爬虫
  15. def run_spider(arg):
  16. for i in range(len(arg)):
  17. os.system("gnome-terminal -x bash -c 'scrapy crawl %s'" % arg[i])
  18. class CLI(Cmd):
  19. def __init__(self):
  20. Cmd.__init__(self)
  21. # 设置命令提示符
  22. self.prompt = ">>> "
  23. self.intro = '''
  24. 欢迎进入爬虫控制台
  25. 输入0:查看帮助'''
  26. self.doc_header = ''
  27. self.undoc_header = ''
  28. self.nohelp = "*** 命令%s没有帮助文档"
  29. def do_download(self, arg):
  30. ''' 下载文件'''
  31. p2 = multiprocessing.Process(target=run_download)
  32. p2.start()
  33. def do_0(self, arg):
  34. self.do_help(1)
  35. def do_help(self, arg):
  36. def ddoc(ss, arg):
  37. try:
  38. doc = getattr(ss, 'do_' + arg).__doc__
  39. if doc:
  40. print arg + ":"
  41. print doc
  42. return
  43. except AttributeError:
  44. ss.stdout.write("%s\n" % str(ss.nohelp % (arg,)))
  45. cmds_doc = []
  46. for name in self.get_names():
  47. if name[:3] == 'do_':
  48. cmds_doc.append(name[3:])
  49. print self.doc_header
  50. for c in cmds_doc:
  51. ddoc(self, c)
  52. # 添加新的爬虫连接
  53. def do_add(self, args):
  54. """ 新增链接(厂商网址)到数据库中
  55. 输入格式为:add name abb;start_urls www.baidu.com www.baidu.com www.baidu.com
  56. add是添加命令,后面的是参数。start_urls后面可以跟随多条数据,空格分开"""
  57. if not args:
  58. print "输入内容为空,请查看帮助:help add"
  59. return
  60. print args
  61. data = dict([(bb.split(' ')[0], len(bb.split(' ')[1:]) == 1 and bb.split(
  62. ' ')[1] or bb.split(' ')[1:]) for bb in args.split(';')])
  63. print data
  64. DbUtil().conn().collection('url_items').insert(data)
  65. # 列出所有的爬虫
  66. def do_list_spider(self, args):
  67. ''' 列出所有的爬虫'''
  68. print commands.getoutput("scrapy list")
  69. # 运行一个爬虫
  70. def do_run_spider(self, arg):
  71. ''' 运行一个爬虫,例如run_spider abb'''
  72. p3 = multiprocessing.Process(
  73. target=run_spider, args=(arg,))
  74. p3.start()
  75. # os.system('scrapy crawl ' + arg)
  76. def do_run(self, args):
  77. ''' 运行所有的程序'''
  78. # 运行爬虫
  79. self.do_run_all_spiders(1)
  80. # 运行下载
  81. p2 = multiprocessing.Process(target=run_download)
  82. p2.start()
  83. # 运行下载监控
  84. p3 = multiprocessing.Process(target=run_download_watch)
  85. p3.start()
  86. # 运行所有的爬虫
  87. def do_run_all_spiders(self, arg):
  88. ''' 运行所有的爬虫'''
  89. s = cmd('scrapy list').value().split('\n')
  90. if not s:
  91. print "没有爬虫,请检验代码是否正确"
  92. return
  93. p = multiprocessing.Process(
  94. target=run_spider, args=(s,))
  95. p.start()
  96. # os.system('./run_spider.sh ' + spider)
  97. def do_q(self, arg):
  98. ''' 退出系统'''
  99. return True
  100. # emptyline
  101. def emptyline(self):
  102. os.system('clear')
  103. print '回车清屏,help帮助,tab补全'
  104. # 当无法识别输入的command时调用该方法
  105. def default(self, line):
  106. print '输入的命令' + repr(line) + '错误,请输入help查看命令帮助'
  107. # 退出之后调用该方法
  108. def postloop(self):
  109. print '谢谢使用'
  110. def completedefault(self, *ignored):
  111. return ['add', 'run_spider', 'run_all_spiders', 'list_spider']
  112. if __name__ == "__main__":
  113. cli = CLI()
  114. cli.cmdloop()

python Cmd实例之网络爬虫应用的更多相关文章

  1. 企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

    前天小编带大家利用Python网络爬虫采集了天气网的实时信息,今天小编带大家更进一步,将采集到的天气信息直接发送到邮箱,带大家一起嗨~~拓展来说,这个功能放在企业级角度来看,只要我们拥有客户的邮箱,之 ...

  2. python核心编程中网络爬虫的例子

    #!/usr/bin/env python import cStringIO # import formatter # from htmllib import HTMLParser # We use ...

  3. python学习之----初见网络爬虫(输出整个网页html的代码)

    from urllib import urlopen html = urlopen('http://www.manluotuo.com') print (html.read()) 控制台输出整个网页h ...

  4. 智普教育Python培训之Python开发视频教程网络爬虫实战项目

    网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 01.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 02.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Pytho ...

  5. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  6. iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据

    网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...

  7. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  8. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  9. Python网络爬虫入门篇

    1.  预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. 2. Python爬虫基本流程 a. 发送请求 使用 ...

随机推荐

  1. PrepareCommand

    /// <summary> /// 执行参数查询 /// </summary> /// <param name="cmd">数据库执行命令< ...

  2. Activiti工作流学习-----基于5.19.0版本(3)

    前面关于eventType的属性值的配置简单的说了一下,activiti支持的值如下表所示:这是我摘抄的activiti官网的 Event 的名字 描述 Event的类名 ENGINE_CREATED ...

  3. tensorflow 使用

    1.linux 安装tensorflow ubuntu中安装:link 用pip安装的过程中,可能出现网络链接的问题,尝试多次链接,直到成功!!! python -V sudo apt-get ins ...

  4. awk的日志模块追加日期时间字段的方案

    function test() { i = ) { system("sleep 1") "date +'%Y-%m-%d %H:%M:%S'" | getlin ...

  5. Ubuntu下Vim 如何进入全屏编辑模式

    如题:F11进入全屏编辑模式,再按F11则退出全屏编辑模式.

  6. C++指针的操作和运算(转)

    既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样.但是每一种操作或运算都应该对这种数据类型有意义.比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运 ...

  7. 【C++模版之旅】静态多态的讨论

    说到面向对象特性之一“多态”,以我的水平已经说不出太多新意了.相信很多程序员代码K多了,做梦都在“多态中”运行着.常规的多态是C++语义内置支持的一种特性,通过虚函数可以实现这个特性,为了后面以示区别 ...

  8. WPF - 如何引用external dll中图片

    前几天一直想引用别的DLL里面的一个图片.总是出现各种各样问题,一气之下将图片拷贝到当前Project中,运行良好.虽然知道引用图片,就1.2.列出来的2点就够了. 1. The Build Acti ...

  9. mysql 从data文件恢复数据库

    安装在D:\mysql\mysql-5.6.24-winx64下的mysql 由于系统坏了,移到另外一台机器上启动 步骤如下 1.复制以前的mysql安装文件及data文件下:2.全新安装mysql3 ...

  10. Java IO教程 导读

    Java IO是一套java 用来读写数据(输入和输出)的API.大部分程序都要处理一些输入,并有输入产生一些输出.Java为此提供了java.io包. 如果你浏览下java.io包,会对其中各样的类 ...