简单记录一下,这是我做的第一个数据分析项目:虎牙最火的直播类别,哪些主播的人气最高,从爬虫爬取到数据分析,中间琢磨了三天左右,收获很大,很有成就感,小小啰嗦一下。
先声明一下,这个项目借鉴了以下文章的代码(因为我是爬虫新手,还有很多不懂):
https://blog.csdn.net/litao0942051021/article/details/86663921
原文章研究的是:斗鱼网站上最火的直播类别,哪些主播的人气最高,而我照猫画虎,研究了虎牙相应的情况。在最开始的时候我以为单纯地copy代码,就可以用这个通用爬虫爬取其他网站信息,我错了,就这一步就琢磨了两天。接下来我来具体讲讲整个过程以及注意事项。
①查看网页信息
这里面原来有大学问,我通过对比斗鱼跟虎牙的不同来说明。
先看斗鱼,打开斗鱼直播首页(是直播首页不是首页,直播首页才能一页一页地翻):https://www.douyu.com/directory/all,按F12,查看网页信息-查看Network请求。
image我们在这里重点关注XHR文件,为什么呢?因为我们要爬的房间信息存在XHR文件,那到底是哪一个呢?我们可以通过翻页,然后点随意一个XHR文件,点Preview查看具体信息。我们发现,所有的房间信息都存在下图的名为“1”、“2”(也就是页码的XHR文件)。
image然后我们点Headers,查看Request URL,通过观察可以知道:第一页的Request URL是:https://www.douyu.com/gapi/rkc/directory/0_0/1,第二页的Request URL是:https://www.douyu.com/gapi/rkc/directory/0_0/2,链接最后的数字正好对应页码,利用这个规律可以一次爬取大量数据。所谓的Request URL,里面存储的内容就是在网站不完全加载的情况下也可以获取的网站信息。
image那么现在来看虎牙直播,它跟斗鱼又有什么不同呢?
image虎牙不像斗鱼一样,储存信息的文件直接以页码命名,经过一番查找,原来藏在这个叫cache.php?m=LiveList...的文件中,现在来看一下它的Headers-Request URL有没有跟斗鱼一样的规律。
image有的哈哈,说明在这里也可以一次性连续爬大量房间信息。接下来我们关注一下我们要爬的信息,点Preview,下图红框内的信息就是我们想要的,分别为直播分类、主播名、房间号、房间名和在线人数。
image②爬取数据
万事俱备,只欠东风。上面就是爬取数据之前的准备工作,废话不多说,接下来直接上代码。
from urllibimport request
import re
import requests
import json
import importlib,sys
importlib.reload(sys)
count =1
#这里就是F12查看的Request URL通用格式
base_url ="https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0&page="
#文件路径,先新建一个csv文件,这里是“totaldata.csv”
host_file_data =open("G:\\pycharm\\Analyze huya\\totaldata.csv","w",encoding='utf-8')
host_file_data.write("房间ID,房间名称,房间类别,主播名称,房间人数\n")
#爬取前100页房间信息
while count <100:
request_url = base_url +str(count)
response = requests.get(request_url)
json_data = json.loads(response.text)
for host_infoin json_data["data"]["datas"]:
# 解析json里面的具体房间信息
home_id=host_info["profileRoom"]
home_name = host_info["roomName"].replace(" ","").replace(",","")
home_type = host_info["gameFullName"]
host_name = host_info["nick"]
home_user_num = host_info["totalCount"]
host_file_data.write(home_id +"," + home_name +"," + home_type +"," + host_name +
"," +str(home_user_num) +"\n")
count +=1
上述代码用pycharm运行时可能会显示库没有安装,解决方法:点pycharm左上角File-Settings-Project Interpreter-右侧加号,然后搜索、安装。
image下面是爬到的数据↓,要注意一个问题:如果直接打开csv文件是会显示乱码的,解决方法:
1.新建一个txt文件。 2.在txt文件中打开csv文件,另存为csv,选择编码utf-8。
image③数据分析
数据分析可以用python的matplotlib,pandas库,也可以用Excel的数据透视图,能说明问题就行。
以下数据取自2020年2月22日00:31:39,统计了前100页11881个房间信息,不包含已经下播的主播信息。
1.统计最火的直播类别:
(使用python的pandas库读取数据,用matplotlib进行可视化处理)
代码如下:
import pandasas pd
import matplotlib.pyplotas plt
#刚刚爬完的数据文件存放路径,有可能会报错一些坏的数据,加一句error_bad_lines=False可忽略
df = pd.read_csv(r"G:\pycharm\Analyze huya\totaldata.csv",encoding='utf-8',error_bad_lines=False)
# 统计最火的直播类别
names = df["房间类别"].value_counts()
plt.rcParams['figure.figsize'] = (20.0,4.0)#设置图的尺寸
plt.rcParams['figure.dpi'] =200 #设置分辨率
# 设置图的字体
font = {
'family':'SimHei',
'weight':'bold',
'size':'15'
}
plt.rc('font', **font)
plt.bar(names.index[0:15], names.values[0:15],fc='b')
plt.show()
结果如下:
image2.统计最火的主播:(按房间在线人数分)
这个直接拿Excel降序然后插入柱状图吧,比较简单。
image image3.统计最火的直播分类:(按照直播主播数分)
这一项也偷懒不拿python了,直接Excel的插入-数据透视图,添加直播类别和主播名称两列数据,进行类似SQL的group by操作。
image image4.各类别在线人数对比:
image image综上所述,王者荣耀和星秀是目前最火的两个类别,王者荣耀主播张大仙人气最高(不愧是2019最气人主播啊哈哈)。不过数据存在时间上的局限性,需要通过多日爬取、纵向比较来提高分析的全面性、准确性。另外,星秀是一个什么类别?不太了解,是颜值主播吗?有空我也去看看哈哈哈。
网友评论