Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网络爬虫爬取b站励志弹幕并生成词云(精心笔记总结)

网络爬虫爬取b站励志弹幕并生成词云(精心笔记总结)

作者头像
兰舟千帆
发布于 2022-07-16 04:25:15
发布于 2022-07-16 04:25:15
84100
代码可运行
举报
运行总次数:0
代码可运行

前言 在进入本文之前,我很想给大家推荐b站这个视频,3080.2万播放,27.9万条弹幕。这个视频之火不是因为漂亮的小姐姐,也不是什么很傻,很逗人发笑的视频,而是因为那满满的正能量,以及对于年轻人的激励,我们要活成我们的样子,我们是后浪,我们遇见这个时代,时代遇见今天的我们。

弱小的人才习惯嘲讽和否定,而内心强大的人从不吝啬赞美和鼓励!我们就是后浪,奔涌吧!后浪,奔涌吧!新一代!相信你们看了这个视频会内心波涛汹涌。在b站待了这么长时间,很荣幸可以看到这样的视频。

正文 1:我们今天的目标是爬取此视频的弹幕,并生成词云。一方面是为了做笔记,总结今天学到的,另一方面,我是为了分享经验,以及让大家看到这满是正能量的弹幕词云,足以冲击你的内心。 2:实现思路 我们主要用到以下几点知识

<1 爬虫技术     python库: requests , re, csv, jieba,imageio,wordcloud

<2分析网站: bill网站特定视频

<3查找数据来源的api: 弹幕数据来源的api 3:具体实现:

我们来打开billbill这个视频主页:

我们要拿到的是弹幕数据,我们可以指定某天的弹幕数据,当然通过爬虫,我们可以全部拿下,今天,我们随便指定日期,都是一样的道理。

既然是分析网站,自然是右键查看源码了。

这里面有数据,但不是我们的方向,我们可以清空数据。我们要拿到弹幕的api。那么,需要抓包。我们点击b站弹幕列表下面的查看历史弹幕。

看到上面那个日历没有,今天是2/17,那我就拿今天的弹幕。

下面进行抓包,我们清空network下面的所有,现在我们点击日历上的2/17,我们观察会出现什么。来看

不知道你有没有注意到这样一段 :

seg.so?type=1&oid=186803402&date=2021-02-17

我分析这个包,后面是一个日期格式的参数。那我一定会想到,只要我按照这样的格式,我可以指定任意一天。很可能这个就是我们要寻求的方向。我们点进去。来看

这里放大了了,希望能看到这个蓝色的一行。很熟悉的,是url,下面是请求相关的。我们点进去这个url。会发现是一个文件,这个文件并不是普通的文件。你可以下载,然后用notepad打开,指定格式utf-8编码后,会显示这样。

我们看到里面是有弹幕中文的,但是也有不认识的东西。这里至少可以证明我们的url找对了。这样的弹幕数据不是我想要的,因为我还要生成词云,说以还是以代码来处理整个过程。我会解释相关的代码。 来看代码 下面展示一些 内联代码片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#流程
#导入工具
import requests #第三方工具
import re #正则
import csv #处理保存csv文件格式
import jieba #用来分词的国人开发的库 import wordcloud
import imageio # 读图片
import wordcloud #词云库

#目标网站
url = ' https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=186803402&date=2021-02-17'
#模拟浏览器发送请求,接受返回的数据
headers = {
    # 用户代理 身份证
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
    # 账号已登录信息
     'cookie': '_uuid=DB17FC3E-C33B-0402-FEC8-6D5F54FFD75826400infoc; buvid3=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; sid=a2zoyf7s; buvid_fp=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; DedeUserID=650586683; DedeUserID__ckMd5=673346effe04fe44; SESSDATA=dc4b2c16%2C1628474903%2Cc95da*21; bili_jct=f92980128fe4681476212c6cfe3d0ff7; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(J|)JR|||Rm0J uYukmkkmJk; fingerprint3=dc6c77bb0dfdccdd39bc9efbb780630d; fingerprint=f29725bb59f7984374f945e2ebddc362; buvid_fp_plain=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; fingerprint_s=0a7abb581b9ea03451e614a51a3d4b2b; LIVE_BUVID=AUTO8416133069733130; bp_video_offset_650586683=491829482594004200; bsource=search_baidu; PVID=1; bfe_id=1e33d9ad1cb29251013800c68af42315'
}
resp = requests.get(url,headers=headers)
print(resp) # 打印输出一下看是否可以正常访问
print(resp.text)#以文本的形式打印网页源代码
# 获取弹幕数据
#中文
Danmu = re.findall("[\u4e00-\u9fa5]+",resp.text) # 用到的正则,匹配中文
print(Danmu)
# 4.数据保存
for i in Danmu : #相当于一个遍历保存
    with open('B站弹幕.csv','a',newline='',encoding='utf-8') as f :
        writer = csv.writer(f) #这里可以理解为传入文件句柄
        #文件句柄可以帮助我们找到该文件,作用是这个。
        danmu = []
        danmu.append(i)
        writer.writerow(danmu)
# 绘制词云
f = open('B站弹幕.csv','r',encoding='utf-8')
txt = f.read()
#print(txt)

# 1.分词处理
textlist = jieba.lcut(txt)
print(textlist)
string1 = ' '.join(textlist) #拼接成整个字符串
#print(string)
mk = imageio.imread(r'心.jpg')
w=wordcloud.WordCloud(
    width = 1000,
    height =700,
    background_color ='white',
    font_path='msyh.ttc',
    mask =mk,
    scale = 18,
    stopwords = {'','\n','\r'},#停用词
    contour_width =5,
    contour_color ='red'

)
# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string1)
#将词云图片导出到当前文件夹
w.to_file('out1.png')

我觉的代码很详细了,但是给大家在稍微说点就是为何要指定user-agent,以及cookie。 指定user-agent是为了模拟浏览器访问,否则网站会认为你是爬虫,是写程序去访问的,可能会被卡擦掉。当然还有指定高级的线程池什么的,在这里是没必要的。cookie,保存了你登陆网站的信息,很像一个身份证,如果你不指定cookie,那么网站会提示你登录的。可以把他理解为身份信息,当你访问网站时,网站就给你存一个cookie。 这里面有一个jieba库,是我们国人开发的,有点自豪。是用来分词的,具体可以去查阅文档理解相关的源码和方法。

re库是导入用来写正则语法的库,是用来匹配的。规则很简单,但是东西比较多哦。当然我们也可以直接去网站查看规则。很多匹配的语法规则都有。csv是一种文件格式,也可以去查看库理解,并不是难事。词云时,需要读取csv格式文件

代码中wordcloud中的参数mk代表指定根据的图片绘制词云,这里要求图片背景尽量为白色,里面可以有你想要的形状。更详细的请查看资料了解相关的方法。

还有就是关于with open()这部分代码中的newline参数, 当在读取模式下,如果新行符为None,那么就作为通用换行符模式工作,意思就是说当遇到\n,\r或\r\n都可以作为换行标识,并且统一转换为\n作为文本输入的换行符。当设置为空’’时,也是通用换行符模式工作,但不作转换为\n,输入什么样的,就保持原样全输入。当设置为其它相应字符时,就会判断到相应的字符作为换行符,并保持原样输入到文本。 当在输出模式时,如果新行符为None,那么所有输出文本都是采用\n作为换行符。如果设置为’’或者\n时,不作任何的替换动作。如果是其它字符,会在字符后面添加\n作为换行符。所以这个参数的设置非常重要。

还有一个方法就是’ ‘.join(),代表以’ '拼接字符串。比如 string2 = ‘,’.join(‘abcd’) 那么会输出a,b,c,d。就是这样的意思。

我们来看代码的实现结果,这里有我的几个词云,好与不好,都与图片的选择有关,简单展示一下。

执行完这段代码后,控制台可能会打印你不需要的信息,注释掉即可,那是我测试用的。还有就是不要看到控制台打印出红色字体就认为出错了。你得知道他在说啥。像下面是没有错误的。

就写到这里了,相关的请遵守csdn博客协议。期待与大家共同进步。

------jgdabc 点击访问主页

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序实践:2.3 可滚动的容器组件之 scroll-view
说什么真理无穷,进一寸有一寸的欢喜。大家好,我是石桥码农,今天继续为大家分享微信小程序实践相关的技术内容。
LIYI
2020/04/15
16K1
微信小程序实践:2.3 可滚动的容器组件之 scroll-view
微信小程序官方组件展示之视图容器scroll-view
以下将展示小程序官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。
软件事业部
2022/08/15
2.6K0
【愚公系列】2022年03月 微信小程序-视图容器
覆盖在原生组件之上的图片视图。可覆盖的原生组件同cover-view,支持嵌套在cover-view里。
愚公搬代码
2022/12/01
6710
【愚公系列】2022年03月 微信小程序-视图容器
微信小程序新闻信息列表展示
微信小程序信息展示列表 效果展示 wxml <!-- 轮播图 --> <view class='haibao' bindtap="seeDetail" id="{{item.activityCon
达达前端
2019/07/03
3.1K0
微信小程序新闻信息列表展示
【愚公系列】2022年08月 微信小程序-省市区三联动功能实现
多级联动下拉菜单是前端常见的效果,省市区三级联动又属于其中最典型的案例。多级联动一般都是与数据相关联的,根据数据来生成和修改联动的下拉菜单。完成一个多级联动效果,有助于增强对数据处理的能力。
愚公搬代码
2022/09/26
3.7K0
【愚公系列】2022年08月 微信小程序-省市区三联动功能实现
【愚公系列】2022年08月 微信小程序-纵向和横向选项卡功能实现
以下讲解的是weui版,相关的还有antd-mini版本:https://help.aliyun.com/document_detail/438087.html
愚公搬代码
2022/09/27
1.4K0
【愚公系列】2022年08月 微信小程序-纵向和横向选项卡功能实现
【愚公系列】2022年10月 微信小程序-电商项目-收货地址功能实现
在电商系统中,收货地址是必不可少的功能,没有收货地址用户在下单就没法收到货,而且一个用户会有多个收货地址,比如寄给自己,或者寄给别人。一搬在收货地址选择中会有个默认收货地址以防止每次下单都要选择地址。
愚公搬代码
2022/10/27
5680
微信小程序——轮播图、组件传值、下拉刷新、导航 实战开发
滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。 属性表如下
wsuo
2020/09/22
1.7K0
小程序 下拉刷新 上拉加载
至此,一个简单的下拉刷新上拉加载基本搞定了。巧用微信的各种Api,就很舒服。 继续扩展的话: 1.updateDom那里下拉刷新是简单的清空重新加载,其实可以进行数组比较插入最新记录; 2.出错提示没加; 3.可以使用腾讯开源框架Wepy这种现代化的类Vue框架进行组件化开发。
从今若
2019/09/19
1.5K0
微信小程序实现下拉刷新怎么实现数据的追加
在微信小程序中提供了下拉刷新的api(onPullDownRefresh()),那么实现下拉刷新的业务就是再下拉的时候,在原有的数据中追加新的数据
天天_哥
2018/09/29
2.5K0
小程序百问百答
this对象在程序调用时,如点击事件中会随时改变,而var that=this之后,that没重新赋值之前仍然是指向当时的this,这样就不会出现找不到原来的对象而导致报错
用户10175992
2022/11/15
7550
小程序百问百答
【愚公系列】2022年02月 微信小程序-页面生命周期
注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。
愚公搬代码
2022/12/01
5720
基于腾讯云开发微信小程序(新闻发布及共享平台)下
微信小程序云开发是腾讯云和微信团队联合开发的,集成于微信小程序控制台的原生Serverless 云服务,解决了Serverless架构对端的“最后一公里”问题,通过集成端SDK,配合云开发后台的API网关,为开发者提供了一站式后端云服务。云开发支持多种客户端,帮助开发者统一构建和管理资源,免去了开发中服务器搭建、极大简化了URL配置、鉴权管理等流程,让微信小程序开发者专注于业务逻辑的实现,而无须理解后端逻辑及服务器运维知识,门槛更低,效率更高。只需要一名开发人员就可以完成所有的工作。
淼学派对
2022/11/20
3.4K0
基于腾讯云开发微信小程序(新闻发布及共享平台)下
【愚公系列】2022年09月 微信小程序-Page页面扩展
在小程序日常开发中,有些功能是所有页面都需要使用的,所以就需要对每个page页面进行扩展,在小程序中Page 的作用相当于构造函数, Page 会初始化页面对象然后将配置参数中的属性 merge 到页面对象上。
愚公搬代码
2022/09/27
5190
【愚公系列】2022年09月 微信小程序-Page页面扩展
微信小程序开发学习笔记(二)——小程序框架、组件、WXML
小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。
张果
2023/04/28
2.2K0
微信小程序开发学习笔记(二)——小程序框架、组件、WXML
开发一个微信小程序(2):编写博客园随笔列表
首先我们需要拿到个人博客园的 access_token,这里我希望不要频繁调用这个接口,当进入小程序时调用一次就够了
冰霜
2022/06/06
1.5K3
小程序页面跳转传参-this和that的区别-登录流程-下拉菜单-实现画布自适应各种手机尺寸
小程序调用wx.login() 获取 登录凭证code ,并回传到开发者服务器 调用接口wx.login() 获取临时登录凭证(code)
达达前端
2019/07/04
7490
微信小程序之上拉加载与下拉刷新
在移动端,随着手指不断向上滑动,当内容将要到达屏幕底部的时候,页面会随之不断的加载后续内容,直到没有新内容为止(我们是有底线的-o-),我们称之为上拉加载,从技术角度来说,也可以称之为触底加载。
一斤代码
2018/08/21
4.5K1
微信小程序之上拉加载与下拉刷新
【愚公系列】《微信小程序与云开发从入门到实践》034-页面滚动与下拉刷新相关接口
在如今的移动互联网时代,用户对应用的交互体验要求越来越高,微信小程序作为一种轻量级的应用形式,凭借其便捷性和流畅性,受到了广泛欢迎。在小程序的开发过程中,如何实现流畅的页面滚动和高效的下拉刷新功能,成为了提升用户体验的重要环节。
愚公搬代码
2025/01/23
2610
【愚公系列】2022年08月 微信小程序-slider滑动选择器详解
文章目录 前言 一、slider滑动选择器 1.wxml 2.js 3.效果 二、自定义滑动选择器 1.组件的封装 2.组件的使用 ---- 前言 小程序中滑动选择器相关属性如下: 属性 类型 默认值 必填 说明 最低版本 min number 0 否 最小值 1.0.0 max number 100 否 最大值 1.0.0 step number 1 否 步长,取值必须大于 0,并且可被(max - min)整除 1.0.0 disabled boolean false 否 是否禁用 1.0.0 valu
愚公搬代码
2022/09/27
1.6K1
【愚公系列】2022年08月 微信小程序-slider滑动选择器详解
推荐阅读
相关推荐
微信小程序实践:2.3 可滚动的容器组件之 scroll-view
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验