QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3102|回复: 0
打印 上一主题 下一主题

用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-7-30 16:25 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1 e/ g. e# y$ U$ W4 ~$ }, Q( p
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
      I3 U) N% I; V$ N0 R( A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    & b2 r3 ^7 k5 l6 Y7 W康康大家都怎么说!; S4 R2 @- ~; O' |: [

    $ X/ R5 ~1 n( [% y3 ~4 `1 x

    / z6 b) L* z2 O+ n7 R" M) u
    5 G: A6 p) N  }/ ?2 z7 o- o7 a

    5 T" B* }, J9 h* ?' t/ o开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。7 r) W: a/ {, _, S

    7 {$ X  O& b# z+ Q. f+ u8 t) @

    " f7 X& d+ d) p+ C, o0 t" g" i如何安装模块:
    . ^( z) C- M* Q9 |8 ~
    0 y1 p, \$ \8 e8 R$ H

    ' V, [# ]" F2 a. Bwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    , U) f$ y" L( j% q  Kpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    ) a" ]% _* l  Z; {如果模块安装失败了,可能是这些问题:
    5 o! b- w! v# R: L- Q7 p
    9 r& B: |# K1 W1 w$ V
    + s" _1 S. L2 Q/ F! p1 L7 {3 P
    提示:pip 不是内部命令
    ( ?- a5 k3 R+ w' |你python环境变量可能没有设置好5 a" J# K6 z" I9 @1 A
    有安装进度条显示,但是安装到一半出现报错了  C4 D, e" W& l. z- R7 G' R& ~4 M+ i: r
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    7 D$ |, D; b/ Q1 C7 ~& l) D! v' _3 lread time out 网络连接超时 你可以切换为国内的镜像源* F3 c( ]6 ?% u8 m& f- u
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    9 O# J- I# |' P8 [0 O! c你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    . X' }- E$ W$ A. {3 ^# P可能安装了多个python版本& B& ~  G/ W( l/ Y& H0 Z
    安装一个版本即可# s. g$ L1 c! Z+ d/ k/ ]# L
    Python做爬虫到底可以做些什么呢?. D1 |' i3 L6 n" C. d3 {
    8 W: T& I( x3 H4 t  g8 S1 X

    6 Q$ T! U/ ~% k0 `# q( r$ u常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    ; U4 i( \4 S$ V( Q12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量0 D) S2 c; |7 ~# ?
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    " p; F! ]# v: S/ V1 O模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    0 s0 g, [8 ~4 `# c& F普通B站视频可以爬 番剧是需要会员的
    3 v4 ?( o3 m& R8 V
    , z; L$ a% c9 \0 w- E: s% @7 ~

    - x9 O+ j$ c" t1 f- L2 y' U1 `爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    5 P2 Y5 N; }1 |. R, D# l
    ' Q6 Z  w4 W& k+ G. x, Y, E  U  R

    : Z! v* j+ m3 ?# I1. 确定目标需求 (弹幕数据 那个视频弹幕)
    8 Q1 s4 D- B3 S, N; b    确定了3 @& |" N* K) S" {
    2. 找数据 (数据的来源分析)
    9 X. f( v( @4 H7 E+ T& [- g    简简单单 找到了( }3 H* r4 p; b# {& O# \$ _
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)1 }) u* t! {/ t0 z
        请求方式: get / post
    0 j& s* L' o' _  e/ `5 t0 e    请求头:
    ) }$ R& P" U- H( `5 t* X    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    0 Y( Z) b# s  Y' Z( y+ Y    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)+ ^" f0 ]' H4 j4 u* |8 E1 C. o
    4. 获取数据
    + D' ~- i" E9 D9 }; s: q    文本数据 response.text 获取网页源代码
    / s5 r  m/ O  ?7 [. X8 k    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    3 n  K$ F; x( r$ X( ~    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    6 C+ j8 a" I, t$ r' f5. 解析数据( N6 q$ ~: g" n  u) w7 m- w" [
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    0 e2 @; I6 e2 B( v' K6. 保存数据+ f% o+ `5 J& G* t8 F; h5 u: i' L9 q
    1
    ; t, z* k; k+ H& o/ D2 E2+ ^5 [. w' o; U0 ~# H
    3& ~) c. M: f# N9 g% a
    4
    " g/ q7 P7 v  m* c/ u+ z: o5" W% Q# B6 [& U  c+ \3 p1 `: `7 K7 R
    6
    2 v3 [7 B: H- u, g1 ]! e7* A( u: _2 Q4 D3 }* J
    8$ O4 G$ K* ]/ F) Q2 n$ ^. {
    9$ O6 b: i$ N' @- a2 c# w
    10' b8 }; v' z6 m! S2 E. b
    11
    ' n/ ^2 f0 }9 |  @+ x* [0 Y+ R12
    , _  W  g! w/ T13
    $ X2 G% ?9 r2 L* U5 B14
    " o1 C( w9 C1 S4 A15
    . h& K* v" u7 F% C9 ?: @16
    1 W( v, _/ y7 \- f" u) n$ Apython除了做爬虫数据采集,还可以做什么?
    & i/ s# ?1 w& w: y兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    % L6 A1 A8 n6 R( `
    2 e, b4 j* ?# g9 q' I( F
    : _$ i2 n8 F/ M+ i$ [0 O+ L2 Q1 m
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K9 G7 A' [3 W8 ^  T2 P( b6 X
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;! e0 B6 A$ e1 z$ K0 I# R2 Z- S6 ]5 ]3 `
    我可以做到这样么?) n8 r; g. ^2 a
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;% G5 E# F, e/ |2 A( H
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;* {& e' f' J: B2 Q7 P2 k( _

    0 F8 u7 |6 s# Q5 o0 a
    4 b, W3 ?9 w, m& }% x6 M
    爬虫开发(脚本)(就业/外包) 可见即可爬
    ) e3 O% t7 k, x9 c1 P虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!3 p' F8 V' g$ o% Z2 W, ?: I( I
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!4 _5 e! e6 A, b+ f
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!5 g" A, E4 S2 i! d9 W

    : `% s9 _! r0 {( f

    6 g+ B8 Q- s6 `; F& w0 I数据分析(就业/外包)+ t4 f4 u% [* B% K! p2 c9 x) h

    " \4 ~2 C( @1 \1 S/ o& i4 E

    * ^. H# Q* [9 {: u& y, e自动化(脚本), ?' r* @! x( [: y
    9 O8 X( ?; S; ^" g. v

    8 q! N1 q( B/ b游戏开发/辅助(脚本)
    2 Y# t) N" o2 s; k
    - M: V' f9 G# Z
    7 T) ~3 J+ T+ A0 T
    人工智能(研究生以上学历 要求很高)
    5 o: }. a+ N& n3 g
    " ?# N7 n7 R3 U  T2 f

    1 m& a4 A$ m& @2 {( X% i等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    & s1 m0 [4 r# B# R' x
    - D7 c9 p# W* c: L7 y. D

    9 B" d5 E4 d5 b# @我们开始正题吧1 @; J3 `5 r0 n$ ^6 S

    ' E7 q( m, K8 j2 Y- A
    / \. {, c* T8 D; W) f  u
    爬虫部分:$ z$ m: a( p, o3 o; M
    发送请求 第三方模块 需要pip install requests3 a. y* ~1 Z' |4 {3 X
    * a7 ?* t9 T+ u% G

    3 r7 ?* Y' T" L' m2 l$ r6 P! ]import requests
    7 q/ ^, m% B( ]& G# i4 J$ f) Fimport re  # 内置模块/ Y+ }- v  E, F

    ( J6 d9 \$ f3 W, c
    9 ~3 T( n& G- I9 Z
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'3 b  a$ f6 j/ q* L9 C9 W7 {
    1+ F( t& T; d+ h; Y' u7 p" {4 S  W- e
    2
    $ u' Y( d) c. x  B) _; s* E3) q' l# K1 ^+ `1 n! J
    4) L" W+ S0 j& L1 M, d3 P- {2 l( ?
    请求头的作用就是伪装7 h1 C2 s6 R6 {, q" {1 k" ?

    $ @9 j! G2 y$ K7 T0 A; X3 q
    & u" i" q; {* Y/ ^: d
    headers = {0 I; `8 C' q, g2 x/ X, D
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
    8 T0 C: Z0 q* V9 F% ]& E( l/ ]}
    : s5 G- ]/ c9 E- P( P, S: \1; k: y- b/ O$ d5 H5 Y" d, r0 C! m
    2  ^0 x% {# q% ^6 W: p( C
    3
    ) T  i1 L0 y: T/ L模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    ! j' f3 W7 A$ s& I) B' @1 i; b函数传参/ T+ C( k. U" Y3 V8 |8 X
    1 Q$ Y& \) t9 ?0 G* }* [
    4 @8 }& T1 ^! R
    response = requests.get(url=url, headers=headers)0 K+ r& q, e+ A
    1  Q7 d# X0 r3 W! s
    <> 对象 对象意味着你可以调用里面的方法或者属性8 J/ T) z7 E6 O$ O
    200 状态码 请求成功
    + A) h% L; e8 m* t0 J0 m; b获取数据 文本数据
    , D1 M, D/ p. d# W1 [自动识别编码
    , o' \1 t( Z$ i5 z
    8 L( D) R9 H5 V' Z. Z1 V

    , I) [  |# i+ Q+ W- b3 Sresponse.encoding = response.apparent_encoding0 P$ u; `' @3 L0 j/ z
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)/ i( D) E$ o( {. v  z& T
    1# g5 i2 s3 O0 d4 b* @- m
    2
    : j, y: t6 T* fcontent_str = ‘\n’.join(html_data): `( v4 K* I3 C
    ( }4 h9 p. G8 _" @# M) D8 I, J
    0 W# x3 `9 {; }) N
    要列表转成字符串 ‘’.join()& Z  [4 e, e3 p0 J7 U0 Y& T6 B
    for 遍历4 Q1 I' j$ I. q& a8 m6 {* c+ R
    保存数据 保存字符串
    $ p# O: A7 F  o/ {for content in html_data:3 ]$ Y' n. u* F
        # mode 保存方式 w 写入会覆盖 a 追加写入- P! Y) V) W$ a9 J/ i( B, R
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    * V" o) Q4 W& J5 p  Z' P( B% A        f.write(content)
    / d8 v4 b0 M( A' W        f.write('\n')
      x0 L$ }- z0 k, F9 {9 t* t7 G; s5 Z
    : Q$ [" ~6 O" @

    4 J) w3 s; l& \1 }2 D# print(content_str)8 W- z3 e- I, h% F/ ?1 z
    11 I) w+ t1 ]. l5 }5 x. V
    2
    ' ~1 A/ j2 V1 W3
    & G* Y/ C$ s% R6 J2 x2 d43 U$ D6 ?/ y5 W/ ?) s( \- c' Q7 v" K" ]
    5
    # f3 `5 M6 A8 J61 ]8 f' C/ v! w. |# x% Q
    73 V0 Z( d5 N3 S/ R4 T4 q/ K
    爬取结果
    6 ^. L6 t+ x2 x6 c. t2 K9 i- S! _+ ?# n' _

    & D; \$ e( i6 D& I9 U6 u# i$ |' `# z9 W' a5 g* ~5 J

      s. R3 N: K0 c  P% H  y然后我们再来实现制作词云图部分
    ) N" c8 ], }0 k; t$ A- S
    . x9 W6 F0 F  ?- x, e9 h
    , V# L2 F0 F5 W
    首先要安装这两个模块7 G$ h0 p" V6 J: N% K

      a) r6 I& F5 L( a  L

    ; ~. c- Q- d0 L) r+ C' m) ^4 K% |import jieba  h9 N" p/ y/ x! v/ L8 g
    import wordcloud
    ' f, y0 ]8 N* }, t10 K% @& `( k  X7 \- m% C
    2, S9 F: d/ e+ n% [- h6 `
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。- h6 ~. Y4 Q, A/ m

    , x3 d5 C" c4 I7 w

    ! t, R4 Q6 U# z( w0 Kf = open('弹幕.txt', mode='r', encoding='utf-8')
    # `- ]0 Y  H. h) I% W  Y  z! xtext = f.read()
    . R6 A% w% }4 z; Jtxt_list = jieba.lcut(text)* l$ E. B, T: ^  O6 I
    # print(txt_list)3 f9 Q0 }) F7 ]( q
    1, a+ y/ g" H% A! Y
    2
    6 v( Z) L- D# E; t( S3. }1 F& s& Q  d; P8 x
    4+ q- E6 z2 R* w5 ]% g  r) {
    列表整合成一个字符串. Y# d) a& v3 c9 s9 q4 d# l$ U
    ' v2 f# P$ f& y# H
    0 [/ |+ b' C9 I4 s
    string = ' '.join(txt_list)3 d% |: n3 H, o5 _! R7 W1 u
    print(string)
    ! r7 c( Q5 g1 S8 c. x0 S& Mprint('---'*50)
    ( u& K9 D* X$ I$ F# x; p1 O3 eprint(str(txt_list))8 g$ B. A) X0 ?9 C; T5 x* W
    1
      c$ Q7 @. |6 Q: h8 p: d0 r: X2
    * F1 G# o% k+ L3
    6 m2 K4 Q+ T/ b# |2 \4% f6 f0 S7 s  Y& n. c, x" M
    词云图设置
    6 h8 n2 W1 X1 C8 X. t$ Z8 y. u
    3 F, @' |8 F, k, {  M+ k1 t

    0 I. s- O1 a* z( |wc = wordcloud.WordCloud(9 r( a+ Q3 U6 U4 O
            width=1000,         # 图片的宽4 s  N( D6 I+ t; K1 i+ v1 b
            height=700,         # 图片的高  ?& i  I; _8 f+ M, v, k5 \9 Y' Q
            background_color='white',   # 图片背景颜色9 I. K8 Z8 o1 X
            font_path='msyh.ttc',    # 词云字体6 v: T0 ]7 H2 y: L( ^2 X- |
            # mask=py,     # 所使用的词云图片
    1 q6 f1 K9 A) g2 T$ W" k$ _        scale=15,8 k' j# ^  {; r1 D* y9 J
            # stopwords={words},         # 停用词
    + I4 P! C2 P) j        # contour_width=5,7 N; |: K4 u$ n+ d7 O2 D- O
            # contour_color='red'  # 轮廓颜色# W4 t" D$ ]/ Y! T( c2 M+ t- X
    )
    : S8 K" y9 X, Z, h1
    ! J4 X# G7 C1 ~8 \' |* H# r2
    6 d7 m! [$ m1 Y3 _) N3
    ' r  o( S8 D2 J( k. w4& d' s0 e$ A& Q# y/ W) m
    5
    " y" C0 A1 m. K! c6' g' L+ U" D% e: H$ y, F* h6 g7 X  Y
    7; x* Z7 h$ P7 ~1 b# f& t! N
    8" S% {1 W6 W" R  z
    9) {6 |: S/ a  t, e
    10
    : l" `' v4 O0 r11  J& `7 P' L9 X9 x# a* K$ E  v# _3 ?
    给词云输入文字3 F, w  s6 m( |! U/ p. O* x

    6 S* Y" m. x; W2 |. z
    # y7 d4 S1 d2 Z, h* u2 \
    wc.generate(string)3 k( s+ @; E0 r, r5 @
    1% b4 s( x. I, Q* v
    词云图保存图片地址
    * j" G5 ~5 ?, {+ V. g) y- z
    - g/ G# B' V/ F0 X; ~

    : K  h2 C7 y& ?3 m9 e" q, G2 }wc.to_file('output1.png')3 i; J4 ^. S* e8 v9 n# p
    1* I' Q. a8 N. D) {! K
    词云图的过程中有点慢,大家不要心急
    , B3 j6 n" S! Q2 X% A8 Q9 w3 L
    6 l2 d/ x. v/ {/ Y. v- S5 O) ?
    这是最后的结果
    8 I* i2 c% Y# W' C8 }4 n0 o' O" t% U( e3 A
    ( V" P" @) ^8 z# n
    没有加停用词,所以一些无用的词比较多8 ^# R8 o9 Z8 m$ I8 s

    7 `% d2 S: v* ~5 n7 b

    - u9 j, h5 j" x1 B# Ostopwords={'了', '啊'}
    ! m& x( f2 ]2 o2 e16 w0 o, K  l. ~  p7 m! I
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。+ C9 I" G# \7 A1 L  a# K7 U3 D
    我们再来看下
    6 F: z' h4 j/ _" ?  x7 f/ G6 h- \/ z/ h( U4 f

    ' h( z2 K& r3 |: N: U0 `0 n: ?. n7 N不知名网友:666666 牛批 老哥我要学!!!5 R% {* U; [0 b4 b1 Z6 A( r; b

    , T* x9 y* k) u. h, a; m9 [

    : ?5 }" S2 i. Y# @7 P  ~% [6 u$ [' Z; |2 w

    4 P% M" O/ n7 ^————————————————: T& ^1 r' q, S( A2 N% X
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" W+ r7 f8 f0 e% s+ W
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119074 }- |* ^5 q7 l/ Z0 B: Y- `

    , O% Y: B3 @4 c) v% g4 h
      c+ _6 Z9 L) G8 t
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-13 17:51 , Processed in 0.410732 second(s), 51 queries .

    回顶部