大数据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

(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) 可在右侧合理调整统计图的样式,最后生成动态统计图。

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,对网页的构成元素有一定的了解,知道标签的运用。整个实验过程中,最不足的是不了解一些函数和方法的使用。有时候是先想着这个功能该怎么实现,再去查找实现的办法才学会这个函数或方法。

  • 12
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要实现Python爬取链家二手房的数据可视化,可以按照以下步骤进行操作: 1. 使用Scrapy框架进行分布式爬取链家二手房的数据。Scrapy是一个强大的Python爬虫框架,可以帮助我们快速高效地爬取网页数据。可以使用Scrapy编写爬虫程序,设置爬取的起始URL和相关的爬取规则,然后通过分布式爬取多个页面的数据。 2. 将爬取到的数据存储到MySQL数据库中。可以使用Python的MySQL库连接到MySQL数据库,并将爬取到的数据存储到数据库中。可以创建一个表来存储二手房的相关信息,例如房源名称、价格、面积等。 3. 使用pandas进行数据清洗和分析。pandas是一个强大的数据处理和分析库,可以帮助我们对爬取到的数据进行清洗和分析。可以使用pandas读取MySQL数据库中的数据,并进行数据清洗、处理和分析,例如去除重复数据、处理缺失值、计算统计指标等。 4. 使用可视化库进行数据可视化Python有很多强大的可视化库,例如matplotlib、seaborn和plotly等。可以使用这些库来绘制各种图表,例如柱状图、折线图、散点图等,以展示二手房数据的分布、趋势和关联性。 以下是一个示例代码,演示了如何使用Scrapy爬取链家二手房的数据,并使用pandas和matplotlib进行数据清洗和可视化: ```python import scrapy import pandas as pd import matplotlib.pyplot as plt class LianjiaSpider(scrapy.Spider): name = 'lianjia' start_urls = ['https://www.lianjia.com/ershoufang/'] def parse(self, response): # 解析页面数据,提取二手房信息 # ... # 将数据存储到MySQL数据库中 # ... yield item # 使用命令行运行爬虫 # scrapy crawl lianjia # 从MySQL数据库读取数据 data = pd.read_sql('SELECT * FROM lianjia', 'mysql://username:password@localhost/lianjia') # 数据清洗和分析 # ... # 绘制柱状图 plt.bar(data['区域'], data['价格']) plt.xlabel('区域') plt.ylabel('价格') plt.title('链家二手房价格分布') plt.show() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值