• 原生爬虫小Demo


    import re
    from  urllib import  request
    class Spider():
        url = 'https://www.panda.tv/cate/lol'
        #[sS]匹配任意字符
        # [sS]*匹配任意多字符
        # ?改贪婪模式为非贪婪模式(因为由于有许多</div>)改为匹配第一个
        #加上括号变成组 结果只有()中的内容
        root_pattern = '<div class="video-info">([sS]*?)</div>'
        name_pattern = '</i>([sS]*?)</span>'
        number_pattern = '<span class="video-number">([sS]*?)</span>'
       #获取字符串页面代码
        def __fetch_content(self):
            r = request.urlopen(Spider.url)
            htmls = r.read()
            htmls = str(htmls,encoding='UTF-8')
            return  htmls
        #代码分装
        def __analusis(self,htmls):
           root_html =  re.findall(Spider.root_pattern,htmls)
           anchors = []
           for html in  root_html:
               name = re.findall(Spider.name_pattern,html)
               number = re.findall(Spider.number_pattern,html)
               anchor = {'name':name,'number':number}
               anchors.append(anchor)
           #print(anchors[0])
           return anchors
        #数据排版
        def __refine(self,anchors):
            #strip()  去掉空白
            l = lambda anchor:{'name':anchor['name'][0].strip(),'number':anchor['number'][0].strip()}
            return  map(l,anchors)
        #排序
        def __sort(self,anchors):
            #key 指定那个元素为排序key   ,reverse=True  改升序为降序
            anchors = sorted(anchors,key=self.__sort_seed,reverse=True)
            return anchors
        #排序key
        def __sort_seed(self,anchor):
            #保留数字部分
            r = re.findall('d*',anchor['number'])
            #类型转换
            number = float(r[0])
            if '' in anchor['number']:
                number *= 10000
            return number
        #输出
        def __show(self,anchors):
            for rank in range(0,len(anchors)):
                #print(anchor['name']+'----------'+anchor['number'])
                print(str(rank+1)+':'+anchors[rank]['name']+'    '+anchors[rank]['number'])
        def go(self):
            htmls = self.__fetch_content()
            anchors = self.__analusis(htmls)
            anchors = list(self.__refine(anchors))
            anchors = self.__sort(anchors)
            self.__show(anchors)
    
    spilder = Spider()
    spilder.go()

    输出 

    1:贾克虎丶虎神    40.4万
    2:熊猫LCS直播间    24.2万
    3:MilkGod牛奶    12.7万
    4:君克解说    11.8万
    5:爷大干丶    10.7万
    6:LOL丶摇摆哥    9.4万
    7:LPL熊猫官方直播    9.4万
    8:三毛丶德莱文    7.9万
    9:小师弟180    5.9万
    10:少聪丶灯红酒绿    3.4万
    11:阿涛皎月Carry    3.4万
    12:浩东德莱文    2.9万
    13:熊猫Tv丶狮子汪    2.4万
    14:南陵花神丶    2.3万
    15:我叫GPS    2.2万
    16:PSL英雄联盟    1.4万
    17:空大的劫zz    1.9万
    18:天才Reborn    1.5万
    19:宇宙大表哥    1.2万
    20:龙大大大大大根    9841
    21:芒果鱼丶    8435
    22:熊猫TV丶年华i    6076
    23:牛老师丶    3981
    24:熊猫TV丶八神梦魇    3495
    25:上单教官李某人    3365
    26:听白呀丶    2590
    27:一个很C的稻草人    1969
    28:熊猫TV丶达浪    1845
    29:思思ob    1497
    30:一剑西来QAQ    1470
    31:魔剑神无敌    1447
    32:不二锐雯阿    1379
    33:小凯南zz    1250
    34:阿枫丶丶丶    1020
    35:冰雪丶狐狸    859
    36:娱乐飞    859
    37:顺顺套路王    742
    38:许你一世长安可好    676
    39:张张张小萌    665
    40:Panda丶喜羊羊    651
    41:Proc    620
    42:壮的像个派大星    614
    43:游戏主播十七    612
    44:苏璞呀丶    610
    45:小小小女人丶    588
    46:Sye钰神    586
    47:千夜_zilean    585
    48:哲哲大魔王    575
    49:东北小伙_    572
    50:俗了风7zcc    572
    51:一只小欢欢丶    571
    52:爱流血的兔斯基    560
    53:阿尔托莉雅波塞冬    558
    54:希希天使S    557
    55:熊猫tv丶仙Q    557
    56:小丸仔卡特    557
    57:12345上山a老虎    555
    58:叁少i丶    549
    59:牌面之王丶火影劫    547
    60:咪路m    546
    61:熊猫tv胖胖虎    546
    62:Panda丶冰冰    545
    63:分手何必把锅背走    536
    64:骠骑大将军1    534
    65:小天社长    533
    66:剑圣丶白无极    522
    67:初柔_    522
    68:Panda丶浅唱小生    510
    69:熊猫TV坦克王    507
    70:迟到不准时的岛屿    496
    71:柚子岩雀    491
    72:八岁QAQ    490
    73:熊猫TV_花和尚    485
    74:杨洋洋洋i    482
    75:小伊Zzz    480
    76:熊猫丶杀手小哼    480
    77:红尘安静    480
    78:兮颜木木    480
    79:黄金单身汉丶    469
    80:熊猫壹棉被    468
    81:崩坏吧主人    466
    82:咖啡馆儿    464
    83:花臂男神丶沈迪奥    460
    84:叫我父多吧    458
    85:主播Dyz    457
    86:有一只大狗    456
    87:小逍遥生    444
    88:熊猫TV丶黑默丁宇    440
    89:YK丶唯一    429
    90:熊猫尼古拉斯胖虎    428
    91:深圳AD牌面    427
    92:AstonMartin呦    419
    93:橘子味de茜喵喵Cc    416
    94:熊猫TV维他柠檬茶    387
    95:内江扬子鳄    362
    96:请叫我丫头姐    360
    97:社会我墙哥丶    360
    98:风拓的契约    357
    99:日暮哟    354
    100:小v锐雯永不抗压    339
    101:睿智冷静的耳鼻    328
    102:小风风c    315
    103:熊猫咪咪2016    312
    104:学锅不背锅    312
    105:吃藕人的小丑    298
    106:鲁噜噜噜噜噜    296
    107:龙之舞丶    274
    108:三木阿_森    265
    109:安逸kuku    228
    110:潇洒的小苏苏    217
    111:2017英雄联盟全明星    212
    112:请叫我子弹丶    211
    113:AD江流儿    210
    114:YINGQIWEI    198
    115:请叫我万哥    181
    116:XOL丶梦帝    174
    117:纳纳纳c    168
    118:步子丶    159
  • 相关阅读:
    基于centos的freeradius高可用lvs(UDP)
    sql server 2012的AlwaysOn高可用
    python基础题型一
    用户访一个APP或者网页流程示意图
    DNS解析流程
    crontab的定时任务实例
    Xcode设置
    Nvidia Nsight + .NET
    C++ Pointer-to-Member Selector
    C++11
  • 原文地址:https://www.cnblogs.com/jokerq/p/8722371.html
Copyright © 2020-2023  润新知