原生爬虫小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
原文地址:https://www.cnblogs.com/jokerq/p/8722371.html