python Cmd实例之网络爬虫应用
2015-10-23 10:23
661 查看
python Cmd实例之网络爬虫应用
标签(空格分隔): python Cmd 爬虫废话少说,直接上代码
# encoding=utf-8 import os import multiprocessing from cmd import Cmd import commands from mycrawler.dbUtil import DbUtil import signal # 下载监控 def run_download_watch(): os.system("gnome-terminal -x bash -c 'python ./download_process.py' ") # 下载文件 def run_download(): os.system("gnome-terminal -x bash -c 'python ./download.py' ") # 爬虫 def run_spider(arg): for i in range(len(arg)): os.system("gnome-terminal -x bash -c 'scrapy crawl %s'" % arg[i]) class CLI(Cmd): def __init__(self): Cmd.__init__(self) # 设置命令提示符 self.prompt = ">>> " self.intro = ''' 欢迎进入爬虫控制台 输入0:查看帮助''' self.doc_header = '' self.undoc_header = '' self.nohelp = "*** 命令%s没有帮助文档" def do_download(self, arg): ''' 下载文件''' p2 = multiprocessing.Process(target=run_download) p2.start() def do_0(self, arg): self.do_help(1) def do_help(self, arg): def ddoc(ss, arg): try: doc = getattr(ss, 'do_' + arg).__doc__ if doc: print arg + ":" print doc return except AttributeError: ss.stdout.write("%s\n" % str(ss.nohelp % (arg,))) cmds_doc = [] for name in self.get_names(): if name[:3] == 'do_': cmds_doc.append(name[3:]) print self.doc_header for c in cmds_doc: ddoc(self, c) # 添加新的爬虫连接 def do_add(self, args): """ 新增链接(厂商网址)到数据库中 输入格式为:add name abb;start_urls www.baidu.com www.baidu.com www.baidu.com add是添加命令,后面的是参数。start_urls后面可以跟随多条数据,空格分开""" if not args: print "输入内容为空,请查看帮助:help add" return print args data = dict([(bb.split(' ')[0], len(bb.split(' ')[1:]) == 1 and bb.split( ' ')[1] or bb.split(' ')[1:]) for bb in args.split(';')]) print data DbUtil().conn().collection('url_items').insert(data) # 列出所有的爬虫 def do_list_spider(self, args): ''' 列出所有的爬虫''' print commands.getoutput("scrapy list") # 运行一个爬虫 def do_run_spider(self, arg): ''' 运行一个爬虫,例如run_spider abb''' p3 = multiprocessing.Process( target=run_spider, args=(arg,)) p3.start() # os.system('scrapy crawl ' + arg) def do_run(self, args): ''' 运行所有的程序''' # 运行爬虫 self.do_run_all_spiders(1) # 运行下载 p2 = multiprocessing.Process(target=run_download) p2.start() # 运行下载监控 p3 = multiprocessing.Process(target=run_download_watch) p3.start() # 运行所有的爬虫 def do_run_all_spiders(self, arg): ''' 运行所有的爬虫''' s = cmd('scrapy list').value().split('\n') if not s: print "没有爬虫,请检验代码是否正确" return p = multiprocessing.Process( target=run_spider, args=(s,)) p.start() # os.system('./run_spider.sh ' + spider) def do_q(self, arg): ''' 退出系统''' return True # emptyline def emptyline(self): os.system('clear') print '回车清屏,help帮助,tab补全' # 当无法识别输入的command时调用该方法 def default(self, line): print '输入的命令' + repr(line) + '错误,请输入help查看命令帮助' # 退出之后调用该方法 def postloop(self): print '谢谢使用' def completedefault(self, *ignored): return ['add', 'run_spider', 'run_all_spiders', 'list_spider'] if __name__ == "__main__": cli = CLI() cli.cmdloop()
相关文章推荐
- 各类 HTTP 返回状态代码详解
- AFNetworking 3.0迁移指南
- linux系统下创建oracle表空间和用户权限查询。转自http://www.2cto.com/os/201212/173801.htmllinux系统下创建oracle表空间和用户权限查询 创
- TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
- 同步网络时间的 NTP 协议被发现存在8个漏洞
- erlang https
- 关于WIN8.1系统第三方软件找不到映射的网络盘的盘符的解决办法
- Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
- 虚拟机网络连接方式和网络设置
- 虚拟机安装Ubuntu的上网设置(有线网络和无线网络)
- 关于对《认知、流形与虚实世界》的学习体会
- 芯片搜索网站 http://easydatasheet.cn/?c=wp
- cocoapods 更新失败 bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
- 网络编程
- java 接口回调经典案例--网络请求回调
- Java安全通信:HTTPS与SSL
- Http的编解码
- HttpClient基本用法
- HttpClient 3.1 文件上传