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

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

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

运行结果:40行代码的Python爬虫案例:虎牙-王者荣耀主播的人气排行_第1张图片

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

源码:

import re # 引入正则表达式的re模块
from urllib import request # 引入网络访问模块urllib的request对象
data = '
  • [\s\S]*?\s*' # 爬取主播数据:把每个主播的名字、热度、直播间标题作为一组数据进行爬取 name_data = '' # 主播名字 #()的作用:不显示小括号外相同的标签 number_data = '([\s\S]*?)'# 主播热度,即观看人数 title_data = 'target="_blank">([\s\S]*?)' # 直播间标题 #用到的正则表达式#*:零次或多次#?:非贪婪匹配#\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()))))))
  • 你可能感兴趣的:(40行代码的Python爬虫案例:虎牙-王者荣耀主播的人气排行)