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