Python 爬取“工商秘密”微博后,我做了这个“可视化大屏”(附gif图)
公众号后台回复“图书“,了解更多号主新书内容
作者:卖山楂啦prss
来源:数据分析与统计学之美
前言
微博作为我的日常软件之一,平时除了看看热搜、肖战(哈哈),我还会时不时看看秘密,虽然从来都没有投过稿,但还是会对一些感兴趣的内容评论评论或者点点赞,前两天刷秘密突然很想知道,
秘密为同学们发布最多的是哪些内容?与哪些相关?
或者哪些同学喜欢去秘密下方评论?
评论最多的微博多于什么相关?
秘密经常会在什么时间发布微博?
发布的微博都是情感正向的还是负向的?
当然这些问题后台应该最清楚,也有直接的数据,不过这里我想通过爬取的数据来看看这些问题,或许会得出不一样的结论。
开始爬虫之旅 (注:内容只是娱乐,微博内容是公开的,评论者的ID名将进行处理,只显示一部分)
抓取网址:https://m.weibo.cn/u/2514127734?uid=2514127734&t=0&luicode=10000011&lfid=100103type%3D1&q=%E5%B7%A5%E5%95%86%E7%A7%98%E5%AF%86
想要的数据包括:发布时间、发布的微博内容、评论、评论者、评论中的评论、评论者中的评论者;
未拿到的数据:评论数、点赞数、转发数、发布微博来源等;
知道想要的数据后,接下来就开始寻找数据。一般接口数据都会存在 XHR,所以沿着这个方向基本能找到数据。
最终大屏效果
部分代码
for i in cards:# 在提取json数据时,使用get方法,有就提取,没有就为空# mblog可能有可能没有if i.get('mblog'):result1 = i.get('mblog')['text']ids = i.get('mblog')['id']# print(result1,ids)# print('\n')cop = re.compile("[^\u4e00-\u9fa5]") # 匹配不是中文、大小写、数字的其他字符string1 = cop.sub('', result1) # print(string1)# print('\n')# result2 = re.sub('<[^<]+?>', '', result1).replace('\n', '').strip()sheet.append([string1,'0','0','0','0','0'])# =======微博下面的评论# time.sleep(1)# md = re.findall('<a href="(.*?)">',result1)[0].split('/')[-1]url = 'https://m.weibo.cn/comments/hotflow?id='+ ids +'&mid='+ ids +'&max_id_type=0'response1 = requests.get(url,timeout=30,headers=headers)dat1 = response1.json()if dat1['ok'] == 1:pinglun_num = dat1['data']['total_number']da = dat1['data']['data']for i in da:pinglun = cop.sub('', i['text'])created_at = i['created_at']user1 = i['user']['screen_name']sheet.append(['0',created_at,pinglun,user1,'0','0'])# =======微博下面的评论的评论if i['total_number'] > 0 and i['comments']!=False:comments = i['comments']for g in comments:text = cop.sub('', g['text'])user2 = g['user']['screen_name']sheet.append(['0','0','0','0',text,user2])
在线excel合并:http://www.docpe.com/excel/combine-excel.aspx
为了防止被封,这里在爬取时设置了随机头以及2秒的睡眠,并且没有一次性拿太多,分批次拿,每个批次保存在不同的excel文件,最终利用在线excel合并得到如下数据:
这里总的拿到接近10000条数据(包括无效数据),其中秘密内容和相关评论大概有近2000条,评论者8000左右(包括重复ID)
对数据进行处理,包括删除重复值、异常值(特殊字符)、数据脱敏等。基本的脏数据处理好之后,下面就可以开始分析啦。
秘密微博词云图
首先,把爬取到的所有微博筛选出来。
接下来,将数据导入程序中,得到如下的词云图。
或者,修改一下蒙版。
可以发现在最近这段时间,秘密发布的微博内容中这几个词出现得最多,包括:考研、图书馆、寝室、学校等,临近考研,同学们可能都比较关心学校啊、图书馆啊、座位位置啊这些,这里也祝愿咱们学校的考研人都能取得理想成绩,但行好事,莫问前程。
除此之外,喜欢、女朋友、男朋友等词语也常常出现在微博中,也许是冬天适合谈恋爱吧,记得多买一杯古茗奶茶,把它捧在手心里,暖暖的,很贴心!
秘密微博评论者
这里我一共拿到8010个用户ID(包括重复值),均进行了处理。
用数据透视表进行统计后,得到如下数据,可以看到最近一段时间在秘密下方评论最多的ID名是 海啸*****,其次是寻找****道长、最好18881、我可假猴子ha、工商**精。
数据可视化呈现代码如下:
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import osos.chdir(r'C:\Users\Administrator\Desktop')
ID = ['海啸****','寻找****道长','最好****18881','我可****假猴子ha','工商***精']
values = [53,47,36,34,34]
c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK)).add("", zip(ID,values),radius=["40%", "70%"]).set_global_opts(title_opts=opts.TitleOpts(title="秘密微博评论者TOP5",subtitle="卖山楂啦prss",pos_top="2%",pos_left = 'center'),toolbox_opts=opts.ToolboxOpts(# 是否显示该工具is_show=True,)).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}",font_size=18)).render("数据可视化.html"))
效果如下:
下面在看一下 ID 名为 海啸****同学,都在秘密平台上评论了些什么词语(这里数据较少)
评论的微博与哪些相关:
秘密微博情感分析
这里使用模型对每一条微博进行情感分析,分析其积极分值和消极分值。但有个问题是,秘密前段时间“改版了”,许多内容合并成一条发布,这就会导致最终的模型训练结果会有偏差,这里我并没有解决这个问题,所以结果可能具有不合理性。
进一步的判断出每条微博的情感倾向。
数据可视化:总的来说,最近秘密发布的微博的情感倾向还是比较均衡的,差异并不大,正向情感略高于负向情感。
秘密微博发布时间分析
由于忘记拿发布时间的数据,所以这里从头在爬取一次,这次只要发布是时间,拿到的数据如下。
这里的时间数据是中国标准时间,需要进行转换。
import pandas as pd
import numpy as npdf = pd.read_excel('C:\\Users\\Administrator\\Desktop\\发布时间.xlsx')def trans_format(time_string, from_format='%a %b %d %H:%M:%S +0800 %Y', to_format='%Y-%m-%d %H:%M:%S'):"""@note 时间格式转化:param time_string::param from_format::param to_format::return:"""time_struct = time.strptime(time_string,from_format)times = time.strftime(to_format, time_struct)return timesif __name__ == "__main__":df["处理后的时间"] = df['时间'].apply(trans_format)
转换后的数据如下:
利用python 将时分秒变成小数。因为时间就是至1之间的小数,0是一天的开始,1就是1天了,所以时间是至1之间的小数,也就是中午12点是0.5。
比如这里:
最终处理结果:
接下来开始分箱。
bins = pd.read_csv(r"处理后的数据.csv")
bins
def cut_bins(x):if 0.083333<= x <0.250000:return '02:00:00--06:00:00'elif 0.250000 <=x <0.458333:return '06:00:00--11:00:00'elif 0.458333 <=x <0.541667:return '11:00:00--13:00:00'elif 0.541667 <=x <0.708333:return '13:00:00--17:00:00'elif 0.708333 <=x <0.791667:return '17:00:00--19:00:00'elif 0.791667 <=x <0.916667:return '19:00:00--22:00:00'else:return '22:00:00--02:00:00'bins['所在时间段'] = bins['将时分秒改成常规'].map(cut_bins)
bins
结果如下:
统计:
bins['所在时间段'].value_counts()
数据可视化:可以看到,秘密经常会在 22:00:00 – 02:00:00 这个时间段发布微博,其次是下午13:00:00–17:00:00。
可视化大屏
将图表整合,进行可视化大屏呈现。
效果链接:http://tan-07.gitee.io/ctbu-secret/
项目地址:https://gitee.com/tan-07/ctbu-secret
结果如下:
公号后台回复:工商秘密,获取本文完整代码!◆ ◆ ◆ ◆ ◆麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
Python 爬取“工商秘密”微博后,我做了这个“可视化大屏”(附gif图)相关推荐
- Python爬取南京地铁微博发布客流数据并进行分析
Python爬取南京地铁微博发布客流数据并进行分析 之前在网上看到了分析北京地铁客流数据的开源项目,就想试着分析一下南京地铁的客流数据,可是找了很久没有找到可以获得南京地铁客流数据的接口,就去南京地铁 ...
- python爬取天气与微博热搜自动发给微信好友
python爬取天气与微博热搜自动发给微信好友 前言 系统环境 正文 爬取中国天气网 爬取微博热搜 微信自动发送消息 源代码 总结 github地址 前言 忙着毕设与打游戏之余,突然想着写个爬虫练练手 ...
- python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化
python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...
- python爬取 过去的微博热搜(热搜神器)
python爬取热搜神器(可以查找关键字热搜or过去的热搜) hello,因为老师给了任务,希望我们爬取一些微博上的数据,所以就想到了要爬取热搜,再根据热搜爬取评论.因为微博对过往的热搜不能根据时间进 ...
- Python爬取‘跌妈不认’股票数据,绘制可视化图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于可以叫我才哥 ,作者才哥 大家好,上次我们试着用vba在excel中绘制树状热 ...
- 用python爬取全国和全球疫情数据,并进行可视化分析(过程详细代码可运行)
用Python爬取最新疫情数据 这次重大疫情,每时每刻数据都有可能变化,这篇博文将为大家讲解如何爬取实时疫情数据,并且分析数据,作出数据可视化的效果. 报告梗概: 对中国疫情分析 1.1 展示各省疫情 ...
- Python爬取网易云歌曲评论,做词云分析
前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块 ...
- python爬取某人所有微博_Python爬取博客的所有文章并存为带目录的word文档(实例67)
看上博客上一个作者的文章,想一次性下载到一个word文件中,并且可以设置好目录,通过word的"导航窗格"快速定位单篇文章.一劳永逸,从此再也不用去博客上一篇一篇地翻阅了.整理一下 ...
- Python爬取豆瓣电影、演员评分,平做出可视化图(律师函警告)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于数据森麟 作者徐麟 随着电影行业的蓬勃发展,越来越多的电影出 ...
最新文章
- 28 岁退休程序员自述:不是富二代,行政专业出身,非典型程序员
- 我决定开发自己的第一款iPhone应用
- 【Python】快速设置 pip 源
- 64. Minimum Path Sum
- 2023届春招实习拉钩一面凉经
- 年轻的工程师如何月入伍万XD
- jQuery基本过滤选择器
- java 正则表达式 table_Java 使用正则表达式
- 7z001怎么解压在安卓手机上面_安卓zip文件压缩RAR解压手机下载-安卓zip文件压缩RAR解压v1.0最新版下载...
- VSCode REMOTE SSH
- 机器学习课程笔记【十二】- 主成分分析
- 2.3Word2003段落设置1
- 黑苹果 惠普笔记本电池补丁_黑苹果笔记本:关于DSDT亮度表的分析与修改
- C语言源代码编译全过程
- PT100铂电阻温度传感器详解
- 读文献——《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
- python 写文本文件出现乱码
- Ubuntu 设置 OpenDNS
- 【Unity3D 教程系列第 12 篇】如何用Unity写一个简易的计时器工具?
- 控制面板中的管理工具提示位置不可用
热门文章
- python的easygui模块用法_Python 模块EasyGui详细介绍
- 关于Transitions-Everywhere
- dapper mysql通用类_Dapper.SqlMapper.Query的通用类型转换:DapperRow
- NetCore使用Dapper查询数据
- java中hashCode方法与equals方法的用法
- 业火燃尽这片幽暗荒野 世界终将翻开新一页
- 腾讯大举:封杀第三方微信工具 使用Wetool将被封号
- 计算机毕设Python+Vue养老院管理信息系统(程序+LW+部署)
- 解决问题最有效的方法和技巧就是---花钱
- RTL8721DM 双频WIFI + 蓝牙5.0 物联网(IoT)应用