您的位置:首页 > 编程语言 > Python开发

40行代码的Python爬虫案例:虎牙-王者荣耀主播的人气排行

2020-03-01 03:50 666 查看

40行代码的Python爬虫案例:虎牙-王者荣耀主播的人气排行

爬虫:对网页(HTML文件)进行文本分析,提取所需要的数据,通常使用正则表达式来处理数据.

运行结果:

1.明确爬虫目的:从虎牙直播平台爬取各个王者荣耀主播的人气数,并按照排名显示各个主播的名字,观看人数和主播间名字. 2.找到数据对应的网页,并分析网页的结构找到数据所在的标签,抓取数据

源码:

import re # 引入正则表达式的re模块
from urllib import request # 引入网络访问模块urllib的request对象
data = '<li class="game-live-item" gid="2336">[\s\S]*?</span>\s*</span>'  # 爬取主播数据:把每个主播的名字、热度、直播间标题作为一组数据进行爬取
name_data = '<i class="nick" title="([\s\S]*?)">' # 主播名字 #()的作用:不显示小括号外相同的标签
number_data = '<i class="js-num">([\s\S]*?)</i>'# 主播热度,即观看人数
title_data = 'target="_blank">([\s\S]*?)</a>' # 直播间标题      #用到的正则表达式#*:零次或多次#?:非贪婪匹配#\s:空白字符#\S:非空白字符
def fetch_content(): #定义一个抓取函数fetch_content(),返回html文件
htmls = str(request.urlopen('https://www.huya.com/g/2336').read(), encoding='utf-8') #用urlopen方法接收url# read方法读取文件 #设置编码格式utf8,防止中文出现乱码
return htmls
def analysis(htmls): #定义函数analysis(),分析html文件
list_data = [] #定义一个空列表[]
for html in re.findall(data, htmls):
name = re.findall(name_data,html)
number = re.findall(number_data,html)
title = re.findall(title_data, html)
dict_data = {'name':name,'number':number,'title':title } # 把结果拼接存入字典{}
list_data.append(dict_data) #把字典数据放入列表
return list_data # 返回处理过的列表
def format(list_data): #规范数据格式
data2 = lambda  dict_data:{
'name':dict_data['name'][0].strip(),
'number':dict_data['number'][0],
'title':dict_data['title'][0]}
return  map(data2,list_data)#使用map()函数做映射
def sort(list_data): #定义排序函数sort(),进行数据处理
list_data = sorted(list_data, key=sort_key,reverse=True) #使用python内置排序函数sorted()完成,reverse=True降序排列
return list_data
def sort_key(dict_data): #处理观看人数数据
r = re.findall('\d*',dict_data['number']) #提取数字
number = float(r[0]) #转换为浮点型
if '万' in dict_data['number']: #去除"万"字
number *= 10000
return number
def show(list_data): #输出排序后的函数
print('虎牙-王者荣耀-主播人气排行:')
print('排名       主播       人气        直播间名称')
for rank in range(0,len(list_data)):
print('排名-' + str(rank + 1) + ':    ' + list_data[rank]['name'] + '       ' + list_data[rank]['number'] + '     ' + list_data[rank]['title'])
print(show(sort(list(format(analysis(fetch_content()))))))
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
華楓 发布了1 篇原创文章 · 获赞 1 · 访问量 148 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: