QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3155|回复: 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

    3 k) O/ g* L5 j( n# Z# N用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!* \& h! p' c7 @# f: w; _3 I
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!$ K& d+ T8 _# H- ^/ }1 ~* A# j% m' V
    康康大家都怎么说!
    2 g. b) O, Q/ H: M3 p; }
    5 J/ L2 x. p, x; h* z6 K8 }4 N5 @5 ]; n

    & S9 q- i! x1 D. C9 P
    . s7 U$ s% U' W% v6 m
    ; }$ Y- o1 ]  k5 ?6 Q0 ^# E6 X
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    0 `4 \: V: a2 [8 G. T9 }! t* @
    # ?6 q  A+ V' d7 }& [" v
    - U; \) [7 L: B0 `* w4 ~0 R  R
    如何安装模块:
    2 q  {  {; V# S, l* B0 }2 J2 b% l, G: R6 S/ b) T6 }

      K. r  O6 Q  v; q! q  uwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车+ R. X0 W5 g  u6 z
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    : m* f8 o2 P( i3 h如果模块安装失败了,可能是这些问题:
    ; [4 v- {3 ^2 y( a% [( t+ f! \; S9 V+ o5 S

    2 W6 L# q4 q6 `! ]1 s' t提示:pip 不是内部命令
    * g+ R/ m  B3 Y& J# X" x你python环境变量可能没有设置好
    9 c+ ]' A( w+ |) d有安装进度条显示,但是安装到一半出现报错了) L1 E! N+ `4 }  D2 X* ~
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    5 y6 k- l. k$ ~- yread time out 网络连接超时 你可以切换为国内的镜像源
    . w' L- m6 B& c! V明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    5 ^! J- }/ S" f! R# ?1 {你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    5 {& C$ v* X& E" [' C- L# p可能安装了多个python版本
    : A2 N) X% K0 _2 e  b安装一个版本即可
    8 g6 L- e' W9 a; GPython做爬虫到底可以做些什么呢?
    ( J% D. U' W# t4 J+ d! C) ]0 ~
      C3 z. a9 @% y/ A! Z
    5 M) q+ A, q4 q8 M
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…! h! @5 e* n7 o) A' }! X6 |
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量, |% M  {( E  L8 S' N; w
    可以刷课 可以刷网课 自动 还能自动批量注册账号. g9 q4 W6 v6 M: v- A' O  N
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    . h3 U: K, H% K普通B站视频可以爬 番剧是需要会员的
    4 m0 R8 l9 k3 T. a. C+ w2 w7 B; B& s6 k) S" x: U3 R( M5 k

      w6 _7 b3 Q/ m. s爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载): h# ?1 _$ N" q: Z* V
      K) |, F: I0 z: \( u: x
      I9 x1 D2 `! K
    1. 确定目标需求 (弹幕数据 那个视频弹幕)
    $ E  h6 N. t% s4 h# l; Z2 \    确定了; B. k$ b% {! G$ ?+ A9 b4 ~: [
    2. 找数据 (数据的来源分析)
    3 w. {1 o, E3 s( f9 `    简简单单 找到了
    + X' ]& Z) x, g3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    " ~9 {3 c+ x  E# q* r; m9 R5 D1 E    请求方式: get / post1 ?! r" [( s& W) T9 ~
        请求头:
    % ~0 [6 M. g+ X6 k' V% p    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196) W1 L3 [* c$ O
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    6 @8 G) l) h0 g/ M  k* z4. 获取数据 5 ~+ q6 V0 \& F! o
        文本数据 response.text 获取网页源代码
    # w+ d9 G+ B( X, P3 {7 b  l' q    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多! ~( e0 k% I8 t1 ?  x
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 - i$ Q: F" y) Y, F  x% A) ]6 j& h
    5. 解析数据
    5 ]8 z0 `2 D9 S+ \+ G& J    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 & Q. R4 ~) Q- L7 q
    6. 保存数据
    " z- ]$ e+ v. g8 a) ]- O: n1  s/ `' f' I  M. M" R
    2; W" b7 M, t: a4 B8 r
    3
    3 z* x" Q9 j1 z6 D4) k& t$ z, h9 k& e3 \& i. @* }
    55 {, a9 O  U! B  ]
    6
    " F9 h1 |; ~! `+ c: y9 v5 h0 T7
    2 ^" j) |0 X6 a$ q" z8, t2 R' B% L/ {2 E
    9  r! l* \4 a1 q2 |# z
    10+ D: ]' L* ?5 u7 t
    11
    % e5 s5 X5 M' w. l12; K( U4 q: o* b
    13
      o7 R/ S* X% `. {$ p14! y" m- i/ t/ m
    15
    8 c8 c: G: {4 i+ E! `16
    7 N! z  s9 }6 _4 x( i5 Jpython除了做爬虫数据采集,还可以做什么?
    ( d% `; X; E! `/ X兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包), \  a$ _1 w) S! P* ?

    3 {0 {5 u9 b* U- m# d5 H
      \2 p& S7 R/ n8 M4 A
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K# N% m' L, r, H- _. Q
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    1 |9 o: h9 G3 U, X1 H' G: o; a我可以做到这样么?" H# `; v- T4 V0 g# S
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;8 b- D1 }$ v% i
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;6 `) b0 H4 W& a
    - W' f- c" P1 n1 A8 _9 e& a1 S. F! L- L

    / k6 o- e+ b3 Z  g0 X爬虫开发(脚本)(就业/外包) 可见即可爬
    # H* K: t) P% U7 d9 J& e虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    0 R: D" b# G! A' f6 O9 l很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!% i# t' p" D- ^! H+ I0 g- }
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    ( u9 {0 o! {1 U( ]$ q6 ]2 |9 j: }* J

    ) J; s/ ?0 O" m/ I8 Q  k3 g数据分析(就业/外包)
    ( b) T* D. s2 W- u6 @. Y" p, S4 `! Q" H5 w( i

    / G0 S4 r6 j; V3 R/ I1 G自动化(脚本)
    ) J) w4 S  l& c2 I
    3 K. F! c7 d' x2 i+ r

    7 y2 I4 l8 E8 P* W+ U8 k, o游戏开发/辅助(脚本)0 ?# ^2 z9 }. X& S
    9 V4 w: U& g9 |) P- k, d  z

    5 D9 n( w9 e( X& t人工智能(研究生以上学历 要求很高)
    * U" b4 r1 }- [6 z3 y& E1 |6 h) K+ T2 e* u7 y

    1 _% H2 @4 N. Z+ g! C6 R- L等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    ! t. F. _: R. A$ z6 L
    # N7 ?% l/ F- O! T, v, {. `: P9 j9 y& x5 Y
    2 Q/ J, U3 J4 O
    我们开始正题吧+ Y/ j3 R$ c8 o" Y
    ' h/ N4 n1 z# n+ }4 _2 A, [
    ; a' z) p8 A7 Y) X4 B6 G  ?
    爬虫部分:9 X9 B3 E1 Y8 C, t0 H* n( K
    发送请求 第三方模块 需要pip install requests5 ^& z  q' O1 z: L
    6 v  u' l  w( ^) {0 W

    . N! x" y( G, _import requests; I. z* Z; J8 G1 `, Y/ x
    import re  # 内置模块* f+ a& B( x9 I4 Z. G+ H* `0 E
    : }' H5 l6 V% x& D1 t

    : w) d% N7 c3 P* w( H3 R9 b1 N! Surl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
    $ W0 F! B$ b- D( K1! U+ ~6 Q, l/ {& M4 z- l
    25 \) g6 a) K$ g
    32 T( Z* Y9 p3 [+ M. G; V. S
    4
    5 b$ {$ s; o3 a! X/ i- g请求头的作用就是伪装
    % C6 ^0 [; z) _& \
    " H8 _9 w: H7 D5 k5 s9 D

    & G" n! V" @$ v  C8 Cheaders = {, x  k4 T( a" F. ^, n
        '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'
    : r- c; Y+ U  K: @* f}  j& V' i: M' a
    1; i5 t8 N; a% P8 {
    2$ x' o9 O& }' x; F% ?- ~+ h: `
    3  v8 j, [" W; p- K8 M. x; e
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    6 o. R; _4 s" K3 t) Q- o" B6 v7 ^9 y函数传参  I7 }; r7 [( [' n, g6 H' Z

    * c( g( |& t7 w0 s0 Y' B
    * e2 j+ q; Q- a" \# [: s
    response = requests.get(url=url, headers=headers)
    6 l# B7 R  ^( Z% B. G* ~7 W1
    ! s! r' h8 G7 o+ y* |9 [6 O/ t+ ~<> 对象 对象意味着你可以调用里面的方法或者属性1 y" p7 K6 E6 u) U2 e3 z6 C
    200 状态码 请求成功
    9 [0 h. I- z' m/ p0 v5 I+ r获取数据 文本数据
    6 g$ N& H5 u. D4 Z. w  ^自动识别编码
    , w0 [3 y1 o2 y- Q4 p+ M  U' z. m+ }& a  f/ S, Q* z2 x" d
    5 ]5 C7 e6 `8 w! e
    response.encoding = response.apparent_encoding/ a) Y2 ?# }6 K. c; i
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    ; B  C7 V& M( ?$ e1( L+ D8 \2 F  T- f0 Z2 Z; z
    2( U" H* |3 i( D/ p  m* s
    content_str = ‘\n’.join(html_data)
    * ?3 [- f; z1 J# B) p% ^
    % z) E* e/ Z! O) d" E3 ]5 e
    9 b% O* b, G- j) `/ U
    要列表转成字符串 ‘’.join()
    & a$ F. e; f# hfor 遍历
    , L2 t' z; O, N8 s3 q* d, |保存数据 保存字符串+ |* a; v  d, f, ^9 F
    for content in html_data:
    4 f' o7 d6 Y5 G, c8 H5 t4 H    # mode 保存方式 w 写入会覆盖 a 追加写入
    + L7 }( p- {- N: q' L8 S- E    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:# w' `; o) D+ {+ ^
            f.write(content)
    " ?  [. M, Q" _8 M( G        f.write('\n')4 R- ^6 ]" C; R: |/ ^( z2 s1 Q
    * n, d8 X% L5 F& o  [8 c" h/ G
    $ m) m+ q! y" D4 ]) T
    # print(content_str)
    9 G4 ^: r6 O; i1
    , ]' l" z0 C9 z$ ~$ @2
    $ [& {* f# k+ _7 B9 J/ u3' z& [1 m0 o: o7 t% }
    4
    , V6 v4 l( {0 y( v' z5 Q+ r4 U6 }* m5
    * \# U; |# f6 ]' ]6
    , X+ c& Q5 N& s7 @+ Y6 ~1 j7. \( W# l. M. S
    爬取结果
    " b) \4 _6 B" m
    & A9 a, D6 d/ s1 Q3 N( e2 [
    % r7 G6 D1 B  K, T0 N; \" ^0 S9 ^- P

    1 q; I2 P7 Z6 f  D3 h8 Y
    + ~/ ?+ @0 b3 _, ^' M; F/ [' V2 C  e
    然后我们再来实现制作词云图部分
    5 f$ M8 H5 Z) t( F9 N  N
    ' g& J5 C9 B3 x; @" s

    ; I5 Z" g* h2 h. L首先要安装这两个模块% Y7 C( E  v+ |. c/ }
    / R3 ^3 E( `. K+ J" [$ F! s5 d1 w% c
    * n0 K! n0 ?" J/ ?  o
    import jieba
    ' x3 h7 p7 C1 C3 r* s4 Mimport wordcloud
      |8 ^% H  d, o7 X3 _1
    $ }3 f* a5 e% V6 e1 U2
    ; \; m9 d1 @2 w! M, Z0 l一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。2 ?. {6 H1 T  @" c; a

    1 H- |2 p1 ^+ u! k. w
    6 j6 h/ S" _8 o
    f = open('弹幕.txt', mode='r', encoding='utf-8')9 b) a% @4 r' M% y3 R, I
    text = f.read()% a4 ^7 U9 Z. X" l$ _! x
    txt_list = jieba.lcut(text)* v) o. {' _$ t
    # print(txt_list)
      P% ?& M7 L/ g7 F' L5 ?6 r: q16 C: q+ D& S) t4 P
    2
    9 r6 n. a, C) t3 f: W3
    : }( q1 o% s  r4; h; J' C- x  A& z& S3 W" N, \
    列表整合成一个字符串
    1 n5 J  t  W, e
    4 _4 q4 g2 [) E: f! D% h5 P
    * Y! p$ \3 u: b
    string = ' '.join(txt_list)
    ! T' p7 [1 P1 _# eprint(string)
      {% v" d8 b; s9 ?; r4 Gprint('---'*50)" n/ d+ X7 F) [2 V* n' `7 s
    print(str(txt_list))
    & c2 \$ P1 a; ?2 U; N; G1
    ! S, _* @; j. _( @8 \+ M2
    & M. a: o* j: P3
    & R! C) r5 g9 l4
    9 }$ l+ D% h: G4 x1 U词云图设置
    . b( I) M% u9 M- O- {! O, f9 W
    7 X, B. j) I/ Q. {6 V* F

    5 @9 Y6 ?: d5 ]3 vwc = wordcloud.WordCloud(
    1 r/ I2 _# g& U2 d9 X        width=1000,         # 图片的宽$ v* `4 O& H6 |7 c7 _/ v% P
            height=700,         # 图片的高
    5 z1 e  ]/ m( z9 V        background_color='white',   # 图片背景颜色6 r! R, ]) T1 K1 I2 H0 ~* n
            font_path='msyh.ttc',    # 词云字体
    ; G- y$ C9 b4 Z6 `        # mask=py,     # 所使用的词云图片
    * t) z  g, _: z1 l6 @' O        scale=15,+ H$ x, b9 U- v. @# _  o  @! ~) E
            # stopwords={words},         # 停用词
    ) E' x: f3 |9 u3 P2 a6 }+ L        # contour_width=5,4 h" e: F0 s) O; [
            # contour_color='red'  # 轮廓颜色
    , r' R+ f% V  e5 V- Y( I( Y, g)
    0 o$ q3 g, {- Y/ E+ \1
    " B7 s# s* [4 k3 g8 I2! O: s) {4 n9 }+ R
    3
    + c* x( s- ~, o. D4
    2 I( s  a6 T  ^+ |5
    / L/ p; Y) g# A0 W6) a. L7 W8 E" _: Q4 z" d
    7
    / i" c$ e) @: S1 z' f9 \8
    7 \" B% C7 }: J9
    ' T% N7 d( `$ v0 ^& x  @10% x0 E/ v" T. n5 P# v! d% ^- F, @6 X) D
    11/ i0 l9 l2 ?* ~3 b+ G0 v
    给词云输入文字$ \0 r: H- B3 S
    0 w4 [1 k/ j; h- s1 ^" V  ~: s

    - M: S( S4 U: ]. B1 P2 ~wc.generate(string). z% B5 `3 |/ q1 ^& g1 G' x$ S
    1' X) k" V& b& T1 Y
    词云图保存图片地址! W( Q# @' ]) g/ T

    ; e) U  ^* b% U( o
    $ V& p; _: O/ c5 V
    wc.to_file('output1.png')
    " N, a2 P! p0 V9 ], g4 [1- }5 i6 z1 Y. W' p
    词云图的过程中有点慢,大家不要心急
    / k( c$ o6 n( g5 t# w
    6 N6 _$ a1 r5 I

    5 |4 z/ n, A' ?5 i这是最后的结果
    % d4 K, b1 b$ h  C7 J, n0 G5 T/ k1 f8 \; p0 ?: p
    7 Q$ e( T& v+ s% y1 k+ |
    没有加停用词,所以一些无用的词比较多# B) Q# e* P3 V" f: t' g
    3 G( `) o* K& f

    " t; x# P: f- n8 ]stopwords={'了', '啊'}) [! o  X# n: `! V* n/ f
    19 _0 T( p% X7 B- c9 D) T
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。. k% A2 c0 Z, G9 `% \$ t+ u
    我们再来看下0 u) Q. P& T% ]+ r

    ! z, [7 a8 [8 n9 B
    * N0 N# h' u8 `0 {8 d+ P
    不知名网友:666666 牛批 老哥我要学!!!
    0 I$ D! E8 D* J, M4 t  M* r: B- Y. m
    , R4 M( K' X8 |  G
    4 g7 {  r7 @! j; k) v

    % C% |. `2 ~, _. Q7 R7 f" u: H9 S  O

    9 O& x% U4 d" s————————————————
    " Q3 J3 H6 T: G. j/ Z6 a1 T版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; V& w* `' I% F原文链接:https://blog.csdn.net/ooowwq/article/details/1192119078 ]+ G( c/ I8 l0 N; M) Y5 N+ w! `. H

    9 \. ^/ H; D+ S# W5 e! ]. m
    & J4 M# _1 }/ u( O: ?6 l# [
    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-8-2 11:53 , Processed in 0.569359 second(s), 51 queries .

    回顶部