赞
踩
项目:大数据Python爬取排行榜热度,并数据可视化
该实验主要是用python编写爬虫代码,把爬取到的数据进行整理,上传到flourish网站,进行数据最后的可视化。本次实现的是爬取某站的每天视频排行榜的前100名(根据综合评分为标准,非播放量),生成xls文件后整理并生成动态统计图的视频进行赛跑比较。
该论文是在疫情期间,python网课的最后一个考核实验,是验收一学期下来所累积的python知识的成果,由于最后选题方向依然是爬虫项目,没有考虑游戏等模块知识,尚未涉及到更加深的爬虫技术。实现爬虫的数据可视化的来源是平时逛B站时遇见的一些播放量排行榜比较的视频,比较感兴趣,后学习python才发现可以用爬虫技术实现部分效果,当然Java也可以。为了实现数据可视化功能,根据每天不同的数据我们可以实现条形图的比赛。
整个系统采用了python的爬虫技术,首先简单介绍一下什么是爬虫技术呢?如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的猎物/数据。爬虫是向网站发起请求,获取资源后分析并提取有用数据的程序。而爬虫后得到的各种不同的有用的数据,为了研究或者美观效果,要进行数据的可视化,这就是数据的处理方式。我把系统简单的分为如下几个步骤:
该程序引进了python的四个模块,分别为:
(1) os模块;该模块就是对操作系统进行操作,使用该模块必须先导入模块
(2) requests模块;在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
(3) xlwt模块;该模块实现对excel文件的写入,程序用到excel文件时要用到的模块,它并不是自带的,需要自行安装,命令:python -m pip install xlwt
(4) 解析库lxml,lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。安装命令:python -m pip install lxml
我们在浏览器中输入一个网址,敲击回车,看到网站的页面信息。这就是浏览器请求了网站的服务器,获取到网络资源。那么,爬虫也相当于模拟浏览器发送请求,获得到HTML代码。HTML代码里通常包含了标签和文字信息,我们就从中提取到我们想要的信息。通常爬虫是从某个网站的某个页面开始,爬取这个页面的内容,找到网页中的其他链接地址,然后从这个地址爬到下一个页面,这样一直不停的爬下去,进去批量的抓取信息。那么,我们可以看出网络爬虫就是一个不停爬取网页抓取信息的程序。这方面不懂的需要去简单学习网页的构成,一些hmtl知识便可解决问题。
(1) 首先,导入4个程序需要用到的模块或库
import os
import requests
import xlwt
from lxml import html
(2) 通过爬虫网页,提取我们想要的信息。(按F12)
url代表网址,requests.get(url)是向服务器请求网页资源。之后通过查找一层一层标签下的目的标签返回一个值,再去遍历这个值。
def bug(key_once): url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3' #获得一个网页最简单直接的方法就是 r = requests.get(url) ,向服务器请求资源。 response = requests.get(url).text #response.text返回的是Unicode格式,http响应内容的字符串形式,url对应的页面内容 l = html.fromstring(response) #html.fromstring 会解析html 头部中charset属性,并且自动的decode #下面我们使用相对路径,查找一下相对路径下li标签下的div标签下的class="rank-item",class=content属性的值 matter = l.xpath('//li[@class="rank-item"]/div[@class="content"]/div[@class="info"]') rank = 0 #一开始排名为0 #Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 for item in matter: #for循环遍历matter rank += 1 #排名+1 topic = "".join(item.xpath('./a/text()')).replace('"','') #split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) playinfo = "".join(item.xpath('./div[@class="detail"]/span/text()')).split("万") play = playinfo[0] + "万" up = "".join(item.xpath('./div[@class="detail"]/a/span/text()')) hot = "".join(item.xpath('./div[@class="pts"]/div/text()')) key_once.append({ #在video_list.append列表末尾添加新的对象 'rank': rank, #排名 'topic': topic, #题目 'play': play, #播放量 'up': up, #up名 'hot': hot #热度 }) return key_once
(3) 将爬取到的数据写入Excel表格当中
首先用xlwt.Workbook()创建一个workbook,用.add_sheet创建一个名字为“b站视频排行榜前100”的sheet。用.write把sheet的表头顺序写为’标题’, ‘up主’,‘综合热度’,‘播放量’, ‘排名’。可以设置字体的样式,和行列的宽度高度,具体的语句百度很多。最后用workbook.save保存文件。
def importance(key_once): workbook = xlwt.Workbook() # 定义、创建一个workbook table = workbook.add_sheet('b站视频排行榜前100') # 添加、创建一个sheet al = xlwt.XFStyle() # 初始化样式 al.horz = 0x02 # 为样式创建字体,设置字体水平居中 al.vert = 0x01 # 设置字体垂直居中 head = ['标题', 'up主','综合热度','播放量', '排名'] # 表头 for y in range(len(head)): table.write(0, y, head[y],al) # 把表头写到Excel里面去 参数对应行,列,值,(格式) i = 1 for item in key_once: # 设置第一、二行的宽度 first_col=table.col(0) sec_col= table.col(1) first_col.width=256*40 sec_col.width=256*25 table.write(i, 0, item['topic'],al) table.write(i, 1, item['up'], al) table.write(i, 2, item['hot'], al) table.write(i, 3, item['play'], al) table.write(i, 4, item['rank'], al) i += 1 # 如果文件存在,则将其删除 if os.path.exists('C:/python/视频排行榜前100.xls'): os.remove('C:/python/视频排行榜前100.xls') workbook.save('C:/python/视频排行榜前100.xls') #保存excel文件的路径 print("生成的文件位于:C:/python/视频排行榜前100.xls") if __name__ == '__main__': #调用前面两个函数 key_once = [] importance(bug(key_once))
(4) 把导出的excel文件进行整合
(5) 整合好时间线的文件另存为csv文件,接着上传到flourish网站的Bar chart race模式。
(6) 可在右侧合理调整统计图的样式,最后生成动态统计图。
(1) 运行成功界面
(2) 得到我们想要的数据文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200707024510110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc0MzE0OA==,size_16,color_FFFFFF,t_70
(3) 整合几天的数据(这里由于没有预判到数据的时间差,只有两天,对比不是特别明显),像一些up主做一些国内国外的疫情动态统计图或者地图,比较有好的观看体验,但是获取数据有点麻烦,数据多的情况下需要用python写一个整合的代码比较方便,就不爬了~~!
(4) 在flourish网站上直接导入整合好的csv文件,生成动态统计图。Flourish是款很方便的“动态数据图”制作软件,在国外能够直接访问,但是需要用到google服务器。(不会用的小伙伴自行百度啦)
爬虫技术说简单也很简单,说难也可以很深水,在爬虫之前我先学习了一些html,对网页的构成元素有一定的了解,知道标签的运用。整个实验过程中,最不足的是不了解一些函数和方法的使用。有时候是先想着这个功能该怎么实现,再去查找实现的办法才学会这个函数或方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。