python Cmd实例之网络爬虫应用
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()
python Cmd实例之网络爬虫应用的更多相关文章
- 企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件
前天小编带大家利用Python网络爬虫采集了天气网的实时信息,今天小编带大家更进一步,将采集到的天气信息直接发送到邮箱,带大家一起嗨~~拓展来说,这个功能放在企业级角度来看,只要我们拥有客户的邮箱,之 ...
- python核心编程中网络爬虫的例子
#!/usr/bin/env python import cStringIO # import formatter # from htmllib import HTMLParser # We use ...
- python学习之----初见网络爬虫(输出整个网页html的代码)
from urllib import urlopen html = urlopen('http://www.manluotuo.com') print (html.read()) 控制台输出整个网页h ...
- 智普教育Python培训之Python开发视频教程网络爬虫实战项目
网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 01.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 02.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Pytho ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据
网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...
- Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...
- Python 利用Python编写简单网络爬虫实例2
利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...
- Python网络爬虫入门篇
1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. 2. Python爬虫基本流程 a. 发送请求 使用 ...
随机推荐
- Reshaper 快捷键
配置单个键盘快捷键 1.在主菜单上,选择Tools | Options 2.在导航视图中选择Environment | Keyboard 3.在命令列表中,选择启动ReSharper的命令名称.浏览列 ...
- NGINX当中的SSL配置(PEM启动密码免输入)
干过的都懂,这个东东好像很碍事. 很影响RELOAD的效率...并且,,,好像这个弄了之后,NGINX作RELOAD之后,可以即时更新配置了..(还是说那个DVROOT.CER影响的??未考证) ht ...
- Altium Designer规则
1.PCB规则 是PCB设计中至关重要的一个环节:保证PCB符合电气要求.机械加工(精度)要求:为自动布局.布线和部分手动布局.布线操作提供依据 为规则检查提供依据,PCB编辑期间,AD会实时地进行一 ...
- 中国IC业“芯”结:IC小国真能赶追韩美日么?
集成电路是关系到国民经济和社会发展的战略性.基础性和先导性产业,是培育发展战略性新兴产业.推动信息化和工业化深度融合的核心与基础.因此,我 国历来就十分重视集成电路产业的培育和发展,在这方面投入了大量 ...
- HTTP methods 与 RESTful API
Note GET, primarily used to select resources. Other options for an API method include: POST, primari ...
- (2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
- [置顶] API相关工作过往的总结之Sandcastle简要使用介绍
Sandcastle介绍 在微软推出Sandcastle之前,人们倾向于选择开源的NDoc(.NET代码文档生成器).NDo可以将 C#.NET 编译生成的程序集和对应的 /doc XML文档,自动转 ...
- phpcms:八、show.html
标题:{$title}来源:{$copyfrom}评论:<a href="#comment_iframe" id="comment">0</a ...
- USB Video Class及其实现
1 Video Class 基础概念Usb协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容.这些Class ...
- Quartz定时调度CronTrigger时间配置格式说明与实例
1. CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...