QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3147|回复: 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
    $ C8 B! n' t; `' U  S# O
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    ' Y; c6 `4 E/ ?7 N( ~* _今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    1 G2 q; C8 x" x# d9 P康康大家都怎么说!5 K0 e) ~' W) K' c5 K
    / r) p; y! D2 q) {' ^9 p  x

    0 c  c$ u& W+ t' K. I7 G9 e* O3 k) q
    8 K+ T0 ]( y& _! ]& R

    # k+ s4 L7 e* p" }5 O' _开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。+ z: V: T% a9 E# A" F

    " w3 ?' G: W; h8 |% {  P! i
    ) v) m9 I+ t2 o
    如何安装模块:
    ) s5 w+ M* N$ ?; }4 o4 N
    # }$ t' S" ]! N$ M

    - e' I/ a2 Q# i4 a* `win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    3 o1 P8 D& x8 \, e; Ppycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    % W3 i/ E1 f8 D8 Y3 q如果模块安装失败了,可能是这些问题:7 E1 q+ m2 \+ f8 F0 G" Q
    5 m; n4 t7 d5 `% R% q

    8 L0 X2 Q8 k* ~% t' I! g: r提示:pip 不是内部命令
    9 B' @9 D5 e6 b+ c4 `! ^  |, R你python环境变量可能没有设置好6 ^/ w8 E- t! z) p! S- d
    有安装进度条显示,但是安装到一半出现报错了! x2 v# U# [$ }
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    ' r" T+ [" d* N9 d, g- R" B) l* fread time out 网络连接超时 你可以切换为国内的镜像源
    7 W- F/ s9 v% E5 {8 p' Q明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块8 c8 F3 h  Q- w/ t% J( @
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    # h3 n+ o+ [$ r  U可能安装了多个python版本; V- M- y" d% h2 Z% b8 Q, m+ U
    安装一个版本即可; |/ b% _$ w) O0 z, I: {
    Python做爬虫到底可以做些什么呢?5 S$ S) h# U& z% c

    , z# L5 \5 Z. C; I

    9 A9 k. i- E- n常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…/ ~$ f4 c* X1 H
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量( m  @/ A, T. ]! \
    可以刷课 可以刷网课 自动 还能自动批量注册账号
      @; |9 l7 }' e$ E. R模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    % v' h- c/ r3 }: c# B& c普通B站视频可以爬 番剧是需要会员的
    ) S" ^6 K0 ^4 _+ d3 f6 \7 R
    : t3 C: o) y* A) H7 K2 i  x4 f5 T" p: G" m
    ) m' s/ U( E% F- M/ m! I( r: A
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    $ o2 K1 p1 Z. n! S8 z5 U" W7 [4 F( i' }0 v
    5 M! n3 t, w2 @
    1. 确定目标需求 (弹幕数据 那个视频弹幕)
    # b6 d( @. a" y+ v( W    确定了( A( X/ u- K) c- W! h
    2. 找数据 (数据的来源分析)6 n# x/ I, {- o; B( F" M
        简简单单 找到了3 I8 ?+ `% q* b. T4 H' q. s, K
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    $ [8 @$ q& B9 G5 }$ |    请求方式: get / post
    - n& g  g0 J+ j1 \% I8 I% x5 o    请求头:
    * X6 Y& I) y; W8 ?' H  m4 I    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    7 a; D" y& L" f* M+ v( G    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)4 Z2 e& H0 `7 p& P  G5 T
    4. 获取数据 $ y3 Q% ]% H: x: d
        文本数据 response.text 获取网页源代码
    7 g/ n' f+ M8 C/ p    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    2 _0 b* O( a- I' v) v: G    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 " N: ~" ]# w8 `! I2 p, e
    5. 解析数据" r& W  u/ |. `3 @  \
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 + P9 v" c' i2 W; k- u8 d
    6. 保存数据9 v0 ?+ Q6 L3 Z, e' S
    1- r/ p( ^" J1 Z; \6 X2 R0 P
    24 M. Y& M& L! B: F. l# c
    3
    8 [! S4 _! Y0 r9 n! K4
    ) L! L; w8 c& J& |6 F5
    3 @8 T2 |4 i: ~8 E' j- F0 x6 Y6& o9 N7 r5 @- |0 ]2 ^( L
    77 i: T$ f# C5 L. P2 P5 c) S" M
    84 e- a+ c( Q7 i: ]3 e4 I
    94 |& H" ^& k1 B$ _3 w, a) Z
    109 M. Y- T" X6 T$ ^
    116 i0 |2 y5 T: B" K, h
    12* f6 `: K% ?2 [0 {7 p
    13/ M: s. y5 n0 c) G1 S
    14+ Z' V6 A/ K7 x; }$ S
    157 F( T& s; ]% O* P+ h
    16
    7 d; G4 C, G0 _& R( q  Epython除了做爬虫数据采集,还可以做什么?
    ' v9 K/ o/ ~- g兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)  N' F0 L, @0 v0 |3 E( z! q

    * s0 m! W( }/ u# U: M1 c  l1 M

    + e+ B  f; `- w# a, n3 W网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    1 m& ^, v/ N5 w& ?, G5 Z6 e比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;, m  o# g; @0 G# b( l( K: S; r
    我可以做到这样么?& T$ p+ O8 V7 f
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    3 i6 d, A) A5 k7 c; [. l如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    & _; y$ ?: f  w. ?' H' N
    7 v, g5 Q9 j2 _1 W5 E& {  f
    8 [6 n/ {% V% Z8 a/ j
    爬虫开发(脚本)(就业/外包) 可见即可爬6 R. ^( W; \6 s
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!; f3 c; l0 v. h7 {# L5 G; k
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    & W" F+ ?9 s2 L2 n1 ~! B: `# l. O# q5 t之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!2 u" C  c: H# \2 }. J

    " o8 U6 T0 d* t  t& `/ k3 K" h5 l

      m/ G6 B* ~* i. W, M数据分析(就业/外包)( C' e& |; a: h  ?. ~4 {
    , U; L2 Y. h8 m6 W7 {, k& a

    ; E7 [, M6 |5 r. d" N# g自动化(脚本)$ R( P/ G0 Z# K5 J8 c' w( U, N

    $ p+ y* u3 F+ U
    ' B5 F. M8 f4 j
    游戏开发/辅助(脚本)/ E" i' t7 o8 O& M$ h

    & a) ]2 o* [! o; X& U: d0 @$ y

    0 B# ?# w" R- P/ u  N2 y% z) o人工智能(研究生以上学历 要求很高)
    & J8 N: x9 U. A* u7 P4 U% e
    + h0 ^1 u0 l) V6 {* d/ w. V8 Y0 b" D

    ) c4 {5 ?) j# i& N3 H* {, E等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。! X; k0 I5 i* t! m! R$ e! I

    6 K9 h- l' @$ `6 H2 n3 H+ Y

    4 `9 J! z$ s3 T7 y) g. E" A. u我们开始正题吧$ D1 M) M6 b) U# \, l: P! A

    " n7 Z& `" r( K

    6 m% P; z/ a" d爬虫部分:
    ) e7 y- {) H0 \$ s+ w& j( q! g6 x" X0 o+ f发送请求 第三方模块 需要pip install requests
    * X; i0 B0 L3 ]! k! A  V% u4 j: L* E" O7 @& e! z

    9 y8 G' U8 R, t3 \import requests
    ) {( _+ m* K' i9 J, P; D* `import re  # 内置模块( X  U1 G* Q6 N- u$ S5 Q/ A
    4 L1 m/ Q* Y% @
    9 f8 w6 A% T, `% x
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196') }; Q# Z/ O' _) m
    1
    - w! R2 l! A; k2
      C6 f( }- {( _9 ~' U$ T7 L1 E3- {% P6 C" O+ e( m5 H
    4
    % z+ e# J' l$ b' K; ^4 U0 k请求头的作用就是伪装
    1 }8 m7 }! ^; {. G! {! e0 D5 S: ]+ @+ |4 Z$ V: ~) I
    3 [5 b- ?' A, S' p: u# b& \+ s
    headers = {
    : b* z3 i& N7 i' W    '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'
    # [- R1 v9 d, p}4 J% Z0 \$ O# K  m; Z7 ~9 Z# B
    1
    1 K. P9 p# B' k5 }20 u3 u  Z6 m8 I
    3
    6 @, A+ Z1 h) S4 X1 Z% `模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据! ^, p3 T9 Y& Y4 u
    函数传参' q; I/ l( j! S+ p7 P4 k
    $ e3 U( N- y! G4 z# S  A0 {/ ]& F

    $ y& N' |9 ^0 Y1 A- Cresponse = requests.get(url=url, headers=headers)
    9 {- V* O9 C6 e1' q6 v% h4 E5 m+ m& H2 m
    <> 对象 对象意味着你可以调用里面的方法或者属性
    - q) b2 d6 R7 d1 T% d! Y6 ~# A200 状态码 请求成功
    " o8 W8 P% u9 I/ q/ k5 q获取数据 文本数据
    ' s3 F4 D  v# R自动识别编码6 I8 ]* H6 }- h/ Y! x* ~% X

    9 J! r" R1 V0 }' S
    # Z9 M6 q& }) _: m" P% o* Y+ _
    response.encoding = response.apparent_encoding
    2 r- H8 h) G( q6 X2 vhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    ' R* O' m8 e2 ]0 d; W1
    9 x' d7 {' j  k# g5 a( f; G2
    : h+ `, K( q* U: ]. p2 J+ H; [content_str = ‘\n’.join(html_data)% s5 k3 H: o; @8 P

    4 {# K) Z# D" ~$ o- I
    4 Z3 x$ E7 K& D- y9 U
    要列表转成字符串 ‘’.join()/ C/ I4 A; x& D+ }
    for 遍历
    ; K! ^* I: B& r1 I+ m( `保存数据 保存字符串) u5 Q; W1 `6 x- S9 O) L
    for content in html_data:
    5 g' w/ w6 x: I# D# J    # mode 保存方式 w 写入会覆盖 a 追加写入. h- a3 l% ]+ U
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    ' }5 q. a/ a* f: B& |. h        f.write(content)/ o  d  {( j  v2 ]
            f.write('\n')
    * O: J! v, G7 }  f# e0 B
    " N. E0 j! A8 C  R7 ^; y3 @% u
    / Y5 y1 ?# D; H8 j3 k$ r: [' M7 Q
    # print(content_str)$ @, r+ R" M# f" x4 ^6 l
    1  t* y) [% O6 r, e  Q) V
    26 W% E+ G! p2 w8 _# K
    3
    9 D* c- d' m" f, g4
    9 g+ |$ l$ z: d3 B# C55 n. n' }" _  _9 H1 @
    6
    9 C/ _9 c5 I8 c7! O) Y6 y$ n, U! `7 A5 j; |
    爬取结果) j+ [9 N' \( @# [; w1 P# Z

    , [) b7 `/ t) f

    # w* N3 U! l; M8 W0 Y/ C4 l9 a* p4 @  p6 b6 Z5 q( t4 {" p
    . L' q4 h/ K) h& ]$ J, S
    然后我们再来实现制作词云图部分
    7 J* B6 ^! C- L. O1 f0 a5 I1 q3 M$ F4 B% P' P. E3 D% U

    7 N! ?% b9 F% K1 ?/ ~5 u8 Y首先要安装这两个模块
    0 ~6 [' S+ T7 \4 m$ {3 v
    + z0 ^) M2 C1 a2 G3 `3 s
    % |0 L1 q1 u0 |6 Z2 w+ Y0 x
    import jieba
    7 L9 O/ L! v- U: L! G7 G3 R5 mimport wordcloud
    + j" E  N( y% F4 v2 ~1! [" j* e$ [( n) A7 W
    2
    ) |1 B/ d$ O# v5 {一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。$ t( q& H7 n6 P7 v3 U
    ) L+ g# q% h3 p6 A% s) \/ E: J
    $ _4 Q1 J# C0 h, w* Y; ?6 y3 N' j
    f = open('弹幕.txt', mode='r', encoding='utf-8')
    2 M% I# q- d+ b- Xtext = f.read()
    . J$ n% i4 z5 @3 K# e9 N% ptxt_list = jieba.lcut(text)
    3 g9 y! d3 X- h# print(txt_list)9 q2 O; w6 G3 t
    16 c# O- L. G: A* J) ?$ w8 `& U
    2
    ; a* l# }1 l1 I# L3
    ; U' J- D% ~( l5 k4
    ; r, l( L/ A$ T6 }2 W( y( F  p列表整合成一个字符串
    3 R3 y! {& G! M- t0 M7 h$ L# E* @0 ]) k; B2 t3 }% f( ~8 C2 [

    5 Z/ e7 o6 _) L% ^1 ~  [string = ' '.join(txt_list); o' G, R2 L+ m2 d
    print(string)" p# J; f* \2 A  V8 H4 L# j! I
    print('---'*50)% z- A( v" R, o  j; A/ f
    print(str(txt_list)); n! n2 K# z# M
    1( E6 ^* g" y) \) ]7 U6 ^
    2- Y9 `* G  a% A# |$ ]3 X
    3
    ( \3 J) d4 |& N. U: v4
    + L* W6 B- Q1 r5 T* o/ w( Y词云图设置
    / t& J0 D7 ~: w1 Q6 b0 }; U6 r0 Q7 I# z: L' L1 t: ?7 n4 S7 V6 P  ^
    ; g7 U3 A' C, n8 t2 v) e/ I5 Q2 M8 x
    wc = wordcloud.WordCloud(
    - \& P4 i" Q: D* n$ g3 D        width=1000,         # 图片的宽
    3 ?/ ]$ c$ w6 [1 \        height=700,         # 图片的高
    ' V& I* {+ s1 H- e/ q4 |( B* e- r, P  \        background_color='white',   # 图片背景颜色  `6 \$ q, q( h. V( @5 W
            font_path='msyh.ttc',    # 词云字体
    6 \& i- d( P6 ]        # mask=py,     # 所使用的词云图片
    , h+ z9 z/ b9 s0 ^        scale=15,
    9 A6 ^' x1 H; A4 k8 ?! a        # stopwords={words},         # 停用词
    , v9 w: f# A& x        # contour_width=5,1 _8 _" R- i% Q
            # contour_color='red'  # 轮廓颜色  J  A+ U. t8 k; h5 v% L+ y2 @$ v
    )
      _: ~. d9 h$ K# ?/ O# J17 f: t) t6 `; Y3 L; ~, o0 {2 p
    2, l5 c: n9 L/ f% O% G  e0 _
    3
    7 J7 Q0 n0 Z% @; o& j* X" Y& n4$ F' T2 X1 M2 E) ~0 K3 r( @
    5( W2 X, l3 d; g- R9 i$ b5 P+ _( Q
    6. P7 @; N/ J/ f# W
    74 W* I! g$ N5 B
    8
    8 ]5 b% d7 }' ]2 D2 q92 }, u5 Y4 s  z, f2 S. m/ ]
    10
    " q, T8 X9 A( c$ p11' M' t- H+ f8 H
    给词云输入文字5 T3 d+ ]5 i! Y' e' y6 J
    ; ^2 O$ c# [0 k

    ! n' X3 @6 l9 x' j6 Q/ O5 S, jwc.generate(string)  F3 e, d6 F: D
    12 f* a. T0 v1 H/ U/ C# Q
    词云图保存图片地址
    # ?4 A! ]! L4 n* ^3 O/ J$ G; d. L- d
    ) q# \7 g" v+ k0 x+ C/ N+ P
    wc.to_file('output1.png')0 e5 r" z0 Q0 F
    1
    1 M$ f# D2 i) |* Z) y( L词云图的过程中有点慢,大家不要心急
    2 @, W. A; r  I. D( k$ m# h
    3 W; \8 M' K2 X+ G7 D, Z
    ) w# g+ e( y, i# J" P
    这是最后的结果
    / Q5 N. c/ O2 L( t  c0 `: N& Y& @& q: q* K% ~7 E8 P

    - Z% ?' W/ T* c/ J( c7 L没有加停用词,所以一些无用的词比较多
    . g" s7 b% O- I& R5 v/ m7 n. O% z7 d  c8 N! n6 G7 U
    # f- B) x- _  I' a* z
    stopwords={'了', '啊'}& G1 j9 d( L# M: G+ S
    11 H" w9 }; Q5 D( L$ Q. _
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    . u( p9 i) n2 t1 m: n1 P0 L我们再来看下9 g4 m+ z  |2 t3 i0 b

    ; p4 @2 N! _/ t  |9 q
    : }& k, k. G& X' ?
    不知名网友:666666 牛批 老哥我要学!!!0 d7 F& J, O2 }( D9 F7 [
    7 o7 M' y* ?' Z) p( e

    - d) |7 q& z, P) A1 Y" L4 h" |$ B' X: t' X& W$ s( i0 n/ z; q

    ! b& }# y+ \  z: [% m4 w  Y————————————————
      ]9 P" s) \3 M  R4 K0 B版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 [8 X5 l" @( ^
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 k; B; n; b! n: ~2 r" X
    3 y+ \) v" l5 j: F4 R* l0 P* n
    - y) Q1 |( ?2 A3 T, r
    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-7-29 18:06 , Processed in 0.428207 second(s), 51 queries .

    回顶部