【Class 19】【实例】python 爬虫简单案例实现

目的: 收集熊猫TV上各个主播的人气排行。

首先观察网站,进入熊猫TV后,按F12,分析网站主播名字和主播观看人数的html项,如下几项:
https://www.panda.tv/cate/lol?pdt=1.c_lol.psbar-ca0.0.29u3363v9n8
video-info { video-nickname, video-number }
class=“video-nickname” title=“主播名字”
calss=“video-number” 观看人数
【Class 19】【实例】python 爬虫简单案例实现_第1张图片

# Ciellee 2019-02-24 22:00
# 爬虫前奏:
# 明确目的: 获取熊猫TV 英雄联盟主播人气排行榜
# 找到数据对应的网页:https://www.panda.tv/cate/lol?pdt=1.c_lol.psbar-ca0.0.29u3363v9n8
# 分析网页的结构,找到数据所在的标签位置: video-info  { video-nickname, video-number }

    # 待分析网页数据
    # 
# LPL春季赛RW vs EDG # LPL熊猫官方直播2台 # 678.9万 #
# 模拟HTTP请求,向服务器发送个请求,获取到服务器返回给我们的HTML # 用正则表达式提取我们要的数据 video-nickname,video-number from urllib import request import re class Spider(): url = 'https://www.panda.tv/cate/lol?pdt=1.c_lol.psbar-ca0.0.29u3363v9n8' # 匹配字符串 \s\S: 匹配所有字符串 *:匹配无限多个 ?:采用非贪婪模式 root_pattern = '
([\s\S]*?)
'
name_pattern = '' number_pattern = '="video-number">([\s\S]*?)' # 私有方法,访问网页 def __fetch_content(self): r = request.urlopen(Spider.url) # 类型为字节码,bytes htmls = r.read() #print(type(htmls)) # 将字节码转换为字符串文本 htmls=str(htmls, encoding='utf-8') #print(type(htmls)) return htmls # 分析文本 def __analysis(self,htmls): root_html = re.findall(Spider.root_pattern, htmls) #print(type(root_html)) #print(root_html[0]) # 新建一个空字典 anchors = [] for html_tmp in root_html: name = re.findall(Spider.name_pattern, html_tmp) number = re.findall(Spider.number_pattern, html_tmp) # 将name 和 number 拼成一个字典 anchor = {'name':name, 'number':number} anchors.append(anchor) #print(anchors[0]) return anchors # 对数据进行修饰 # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 def __refine(self, anchors): lam = lambda anchors:{ 'name':anchors['name'][0].strip(), 'number':anchors['number'][0] } return map(lam, anchors) # 对数据进行分析,排序 def __sort(self, anchors): anchors = sorted(anchors, key=self.__sort_seed, reverse=True) return anchors # 排序的key, 将number从字符串提取为整数 def __sort_seed(self, anchor): r = re.findall('\d*\.*\d*', anchor['number']) number = float(r[0]) #print(number) if '万' in anchor['number']: number *= 10000.0 #print(number) return number # 显示数据 def __show(self, anchors): #for anchor in anchors: for rank in range(0, len(anchors)): print('第' + str(rank+1) + '名' + ' : ' + anchors[rank]['name'] +' ------ '+anchors[rank]['number'] + '人') # 用户接口 def go(self): # 访问网页 htmls = self.__fetch_content() # 解析数据 anchors = self.__analysis( htmls ) # 对数据进行修饰 anchors = list( self.__refine(anchors) ) # 分析数据,排序 anchors = self.__sort(anchors) # 显示打印数据 self.__show(anchors) #print( anchors ) spider = Spider() spider.go()

运行结果如下:

PS C:\Users\Administrator\Desktop\tmp\PandaTV> python .\spider.py
第1: 小师弟180 ------ 134.9万人
第2: 2d战衣托儿索 ------ 40.7万人
第3: 丶天琪 ------ 39.3万人
第4: 芒果鱼丶 ------ 19.1万人
第5: 善言_ ------ 16.0万人
第6: 阿涛皎月Carry ------ 10.7万人
第7: 柚子ob ------ 8.6万人
第8: Cajin_西法 ------ 7.5万人
第9: 狼王沃李克 ------ 5.6万人
第10: LPL熊猫官方直播 ------ 4.9万人
第11: 熊猫老吴OB ------ 2.7万人
第12: 三枪赵信 ------ 2.5万人
第13: 少年阿超和阿斌 ------ 2.1万人
第14: p丶gt ------ 1.8万人
第15: 馒头OB解说 ------ 1.4万人
第16: 2018英雄联盟全明星赛 ------ 1.4万人
第17: 暖暖猫神 ------ 1.4万人
第18: 熊猫丶乐鱼阿卡丽 ------ 1.3万人
第19: 韩小豆TuT ------ 1.2万人
第20: 图图Zc ------ 1.0万人
第21: 牛老师丶 ------ 1.0万人
第22: AD阿丁 ------ 9619人
第23: 香港哥 ------ 9328人
第24: Panda樱皇 ------ 9118人
第25: 文希宝宝 ------ 8102人
第26: 一个小桔子 ------ 8090人
第27: 挽神OuO ------ 7382人
第28: Pino一米八 ------ 6752人
第29: 金三炮丶丶 ------ 6744人
第30: 小沁想吹空调吖 ------ 6352人
第31: 顺顺套路王 ------ 6135人
第32: 柒柒酱_ ------ 5126人
第33: JO丶欣欣 ------ 5112人
第34: 青春丶那么羙 ------ 4681人
第35: 小胖丁biu ------ 3742人
第36: 小樽OuO ------ 3432人
第37: 会放牛的王小二 ------ 3250人
第38: 陳圆圆_ ------ 2993人
第39: 瞎子欧巴小黄哟丶 ------ 2854人
第40: 小明伊芙琳 ------ 2817人
第41: 熊猫丶Ysc小叶子 ------ 2690人
第42: SDRW ------ 2662人
第43: 小v锐雯永不抗压 ------ 2568人
第44: 熊猫伏念 ------ 2414人
第45: 栗子菌i ------ 2199人
第46: 牌面之王丶火影劫 ------ 2189人
第47: 汶莉At ------ 2082人
第48: gogobaolan ------ 1863人
第49: 我是巴卫酱 ------ 1830人
第50: 钢枪团长刘大炮 ------ 1827人
第51: 帅帅丶Kayn ------ 1823人
第52: 一只宅男 ------ 1813人
第53: 阿童木Zz丶 ------ 1779人
第54: 奥斯曼大C ------ 1759人
第55: 瓜神z ------ 1700人
第56: 啊一丶Ay1zzz ------ 1687人
第57: 吾_有些落寞 ------ 1675人
第58: 可口可乐的克克 ------ 1659人
第59: 柏金金 ------ 1658人
第60: 浪仔a ------ 1560人
第61: 桂林168 ------ 1549人
第62: 时间刺客浅浅 ------ 1507人
第63: 冷面寒枪人马神 ------ 1484人
第64: 梁老师的作死大头 ------ 1394人
第65: 皮皮SAMA丶 ------ 1393人
第66: 小黑胖砸 ------ 1376人
第67: Panda丶77Boy ------ 1352人
第68: 嘤嘤丸 ------ 1330人
第69: 水壶丶Dai ------ 1306人
第70: 萧萧吖丶 ------ 1248人
第71: 小乐青 ------ 1214人
第72: 小兵和塔 ------ 1195人
第73: 图奇的奶酪工厂 ------ 1124人
第74: 小哇D卡 ------ 1076人
第75: 陪卡一生丶刘万鑫 ------ 1027人
第76: 丸丸丸丸丸子喵i ------ 930人
第77: 湫浅 ------ 910人
第78: 西北毒王玉龙炼金 ------ 904人
第79: 最强凤凰丶铭杰 ------ 870人
第80: 黛儿不是呆鹅 ------ 866人
第81: 熊猫heart狼哥 ------ 850人
第82: 李砖一丶 ------ 848人
第83: 打野野王代 ------ 847人
第84: 昨晚初夜没了 ------ 834人
第85: c沐宸丶 ------ 830人
第86: 7vvv ------ 810人
第87: 七凢 ------ 799人
第88: ELLVEN9336 ------ 780人
第89: Fun_0716 ------ 777人
第90: 风流倜傥的卢 ------ 772人
第91: S_李嘉图 ------ 757人
第92: 不懂老师yc ------ 755人
第93: 爱柠檬的妞妞 ------ 753人
第94: 风残依丶 ------ 744人
第95: 是小哥呦 ------ 742人
第96: O妮娜O ------ 739人
第97: 有梦想的平欧巴丶 ------ 724人
第98: 熊猫TV常昊灵 ------ 715人
第99: Panda丶小财神 ------ 697人
第100: 老冯OB丶 ------ 690人
第101: 白骨_90a ------ 683人
第102: 落叶SGE ------ 672人
第103: 很安静的宅男 ------ 664人
第104: 8月十号 ------ 662人
第105: 上上分 ------ 662人
第106: 热爱电竞的晓东 ------ 660人
第107: 匆匆来过聪聪的错 ------ 660人
第108: PanTV阿杰i ------ 657人
第109: 鸽神麦当 ------ 650人
第110: 熊猫TV灬美猴王 ------ 639人
第111: AAA沙漠 ------ 639人
第112: 伊泽瑞尔111111 ------ 619人
第113: 傻纯丶 ------ 616人
第114: 痴心阿 ------ 610人
第115: 贾维斯的闲暇生活 ------ 609人
第116: 阿狗ii ------ 605人
第117: 婕拉丶小静 ------ 604人
第118: NS隔壁小王吖 ------ 601人
第119: 秋名山碰瓷王灬 ------ 595人
第120: Necro1128 ------ 587人
PS C:\Users\Administrator\Desktop\tmp\PandaTV>

你可能感兴趣的:(Python总结)