当前位置:   article > 正文

大数据Python爬取排行榜热度,并数据可视化_爬取热点并可视化分析

爬取热点并可视化分析

项目:大数据Python爬取排行榜热度,并数据可视化

摘要

该实验主要是用python编写爬虫代码,把爬取到的数据进行整理,上传到flourish网站,进行数据最后的可视化。本次实现的是爬取某站的每天视频排行榜的前100名(根据综合评分为标准,非播放量),生成xls文件后整理并生成动态统计图的视频进行赛跑比较。

1.引言

该论文是在疫情期间,python网课的最后一个考核实验,是验收一学期下来所累积的python知识的成果,由于最后选题方向依然是爬虫项目,没有考虑游戏等模块知识,尚未涉及到更加深的爬虫技术。实现爬虫的数据可视化的来源是平时逛B站时遇见的一些播放量排行榜比较的视频,比较感兴趣,后学习python才发现可以用爬虫技术实现部分效果,当然Java也可以。为了实现数据可视化功能,根据每天不同的数据我们可以实现条形图的比赛。

2.系统结构

整个系统采用了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知识便可解决问题。

3.实现代码

(1) 首先,导入4个程序需要用到的模块或库

import os
import requests
import xlwt
from lxml import html
  • 1
  • 2
  • 3
  • 4

(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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

(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))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

(4) 把导出的excel文件进行整合
(5) 整合好时间线的文件另存为csv文件,接着上传到flourish网站的Bar chart race模式。
(6) 可在右侧合理调整统计图的样式,最后生成动态统计图。

4.实验

(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服务器。(不会用的小伙伴自行百度啦)
在这里插入图片描述

5.总结和展望

爬虫技术说简单也很简单,说难也可以很深水,在爬虫之前我先学习了一些html,对网页的构成元素有一定的了解,知道标签的运用。整个实验过程中,最不足的是不了解一些函数和方法的使用。有时候是先想着这个功能该怎么实现,再去查找实现的办法才学会这个函数或方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/168415?site
推荐阅读
相关标签
  

闽ICP备14008679号