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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容