QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2583|回复: 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
    7 J0 w; q2 l" x4 p5 A3 \4 ~
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!' n. L5 R7 o, A( @: D  |
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    8 f2 f9 F. Y  N4 S5 w康康大家都怎么说!
    % |) H& \0 D; Y) o3 M" Q
    / T% }% K$ }" P) C. r- x

      H) v% r% T+ I7 U0 G- n& ^" j
    . r0 G; M1 J9 e* [8 e7 p
    " e+ g/ ^  d# _% O* n
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。" v7 g  C: @. `5 X1 B% k2 E- j
    : F3 _/ D# `& ^" e6 S  |. _$ n
    $ K7 e0 d; C' D5 N4 ?* x6 D
    如何安装模块:
    ) E* M7 }- j8 s- \
    & R/ b& y6 q9 F' F  s
    $ a: U* Y5 w( O/ H( j5 {6 x/ H+ P
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车4 }$ {* a# N4 C% N6 D; y: n- l
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车- R; ?& N% K2 d+ e
    如果模块安装失败了,可能是这些问题:+ V. f; l, \( e! p: x, F
    4 Y) j  U' F/ D+ c; ]  P8 r

      Z6 @. I- r9 Q  v* U# |  }提示:pip 不是内部命令
    + Z1 C0 }) E- u2 }3 ]% r# v8 w你python环境变量可能没有设置好9 @" x4 W. T: \8 l. k% z
    有安装进度条显示,但是安装到一半出现报错了
    # u: u( i; A* L& q) m9 S因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB+ r1 G7 ?' i* Q" b  T; S
    read time out 网络连接超时 你可以切换为国内的镜像源" z6 `( R1 d- O- `
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    : q2 v. R& m5 Q5 C6 H你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    1 c7 A& K; q. _5 Q  P$ K* v可能安装了多个python版本- S+ T. V. \' q. x  b' `4 t
    安装一个版本即可
      C+ R5 z" R9 _1 h$ qPython做爬虫到底可以做些什么呢?/ Q6 L5 _+ E7 c& t
      E+ O# X  m7 `8 _6 s

      U4 }9 X% B2 Q% m* q, [常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    ; T  @4 y8 E& ]( `% Q12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    % e8 |% l% r: N1 G' ^可以刷课 可以刷网课 自动 还能自动批量注册账号
    6 l& |/ e7 p: D4 a0 _模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    , H. f5 }# n; b& S  \/ |普通B站视频可以爬 番剧是需要会员的8 f2 i- i: S* f* c- X. F

    : ~: f# n2 B: j

    7 P0 a0 q; r( P. m% h# Q爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    - |& D& \" R0 w! |! N! Q& d9 G& t; g: k  b9 P1 k5 g9 }

    - m+ ^% D" ^& V0 P- H1. 确定目标需求 (弹幕数据 那个视频弹幕)( A/ I; {7 l( Z& e5 _/ u# S7 w
        确定了
    ' [; l+ K2 D" a7 e2. 找数据 (数据的来源分析)
    . L  c$ g1 Z, X7 G9 j, E    简简单单 找到了8 A0 `6 }& \# l* [+ \1 G. r
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    % G, W! p* F1 E3 n6 D/ r0 B    请求方式: get / post; L- m$ E( b; x* F/ T+ B) c  \
        请求头: " e' ~7 I1 Q2 B- b
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196; P) r+ E4 x9 y3 a% q8 k! l' X
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)& r( o7 \- D/ e1 p
    4. 获取数据   r. s9 b1 e" N" w% A
        文本数据 response.text 获取网页源代码
    % g+ k5 [0 k7 D+ J    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多- {9 s' R9 l4 J- C8 w
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 . g, ?4 F/ i; W
    5. 解析数据
    2 h9 m* o0 u! g+ e4 G    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 + l1 V' q# {/ v" j/ c3 H
    6. 保存数据2 Z0 t: ^$ D$ T, I$ O( k% n
    1
    8 F/ ~$ r; A3 a" m7 w5 g9 n4 `$ T2
    + [% {* h# m( ]3 u6 E. |- ?1 v38 R& v8 w8 _4 D4 f4 K
    4! v2 ~5 x- [0 }- Z7 b
    5, Z, w0 C+ ]* n1 c4 m: K& ]
    6
    & E. d3 M# {( E7/ `( E. ]& I$ S
    8
    - |0 p1 a  q, P  C- b% O9 _9 Z9+ J0 n; z# ~7 e) U/ s6 U7 J' o
    10
    9 }4 E/ G" _4 @% w9 A/ W- h115 I9 S& ?% i, \. F) C
    12" s0 f, i4 x8 z' ^, ]2 d6 c
    13
    $ I; [7 l) R3 M- n/ S9 r& P! b14# P& F: X( ~) d! ~1 J$ ?# @
    15
    4 d4 O# H1 h% E2 ?( i16; L0 {, d3 b1 j, o7 T
    python除了做爬虫数据采集,还可以做什么?
    ) }/ s0 h# w; j8 t' \兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    0 o& {+ l" j; A* j) i% \4 @0 @' G
    0 D; A, l; \* `) v- P
    6 Y7 u3 H2 y* T- U
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    % a5 K  O" u0 V$ _" V) z比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;$ `( P4 D' }5 U* m$ S$ l. o
    我可以做到这样么?
    % t; U' Q! E+ `0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;* J. d4 X) o  I4 m& ]  H
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    ' g0 B7 C. k% i* w  U
    9 N  ]" @) I$ T1 W8 e; @

    4 m" x- u/ e# g1 o7 v0 t爬虫开发(脚本)(就业/外包) 可见即可爬
    , A' }( C$ k3 f! b( Z虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    ! ?3 [% w' M/ S' N. ~很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!6 e5 z- F3 b+ |( B" o# h
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!* }3 ]# t) }  C2 Q3 b3 `

    / q2 E% h9 S0 v: E( H

    ! A& T# q& G: E# M, {数据分析(就业/外包)/ w7 \9 m+ n# P; @6 `3 V+ D$ d3 [
      E$ w/ W0 L8 ^

    , V9 L7 q  n; f1 g自动化(脚本)3 j, M8 f2 D, q( b

    8 l: ?" [; |$ \2 E
    * t. ~! i7 K4 X( N
    游戏开发/辅助(脚本)
    & X# e6 m5 |( o1 x3 [; D" W; H7 o- U& }5 o- T+ k% v/ K: d& ?

    0 D! r+ Q( K2 l0 ]7 X: h人工智能(研究生以上学历 要求很高)7 T0 u* o# x6 ]" Q
    # c7 f  w9 m8 a5 G
    + ~$ T5 {4 z" i
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。" f* e( ?  y' H% l% _) b
    ( H! p3 b: L; u+ J0 d9 C# s

    9 E+ `- Y% {" X我们开始正题吧
    . g  H! V/ C7 z* v, Z$ j$ S; F. V
    ' o/ Z9 x0 H1 j) g

    5 q4 ~- B6 H) w( z0 E  V2 q爬虫部分:4 ?0 G; Q3 @+ X$ H. x
    发送请求 第三方模块 需要pip install requests
    3 C1 s9 p% k/ z( _: h- [& [2 I* {2 n: L6 P

    & Z( ^( ?1 \# |2 oimport requests
    , k. `0 Z0 l- S! T3 @7 Q' Z4 R0 H9 vimport re  # 内置模块( H+ r" u$ A5 q# G( d
    . \' c! Z6 i0 U) c6 w! `
    ( j0 @8 i: Y- N1 y7 h; U2 G
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'8 [8 i  v/ S/ K8 E- i, P
    1
    " s- b& f0 A# v! p2
    ! P. I/ r/ }0 \% R% w! k3
    ! d: n( |) u. T% x6 r. Z, q49 w% |+ k" V8 T7 @, u5 ]' ]9 B
    请求头的作用就是伪装& }2 o9 \- z, c* ^- t! B

    / B4 _3 Y  c8 m. L% ^8 }7 |, \

    : R0 L( E: ^& }& L, M5 ]: Qheaders = {: v3 Z5 ?$ F" v( _3 C' R
        '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 G) n  i- F& Z}5 a' p" M8 ]7 K! p8 B* z
    1
    ; {; ]) x2 U2 U% q" W* K2
    & p4 x- }4 K" m3 w3
    ( B- W2 n, A! H# x/ L模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据! ?, m3 Y4 ]4 N6 e& B
    函数传参
    8 U  s3 f' D4 H6 ~0 _2 {0 o" f+ c% |* `* z

    ; r$ l$ H- N. l! c/ X3 G6 j" f7 presponse = requests.get(url=url, headers=headers)" f$ s) o6 A6 u, C' A6 K
    1
    ; T  Y3 n" n7 H! I<> 对象 对象意味着你可以调用里面的方法或者属性
    " A3 l7 }% m0 O. B- ~1 S200 状态码 请求成功! ^4 \. e5 J4 l1 H, f& i
    获取数据 文本数据
    % n; X; |, V- s: g) R7 b自动识别编码( F  C2 b7 S% D; A) g# f
    : o. B1 c- [7 u3 T% v2 e! @* r

    1 [& a7 l1 j" S, j3 c/ E6 Fresponse.encoding = response.apparent_encoding' P4 L! h4 d7 p( g2 n' q# n1 b
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    5 n1 t7 l2 [% G1 j* i7 c6 s1
    " x0 `$ E( D8 t  ^9 H2
    8 n- @. R9 a* }0 Q7 P( R4 J. icontent_str = ‘\n’.join(html_data)- k! z+ X' J" I; m7 D  k
    / N# P( z5 h8 I4 [
    & I- n3 P& x: M
    要列表转成字符串 ‘’.join()
    1 H) Y% D1 x( g) f) b4 ^for 遍历  K9 t' a& W. u  C
    保存数据 保存字符串. ]6 \+ b, L2 B
    for content in html_data:! v( M# d9 J+ _/ e7 J( u  G5 p
        # mode 保存方式 w 写入会覆盖 a 追加写入
    4 P) M( D& ]4 b! L) P$ V( w    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:+ \- G) v, Z; J/ f/ R
            f.write(content)( G4 P9 `  i* a  d
            f.write('\n')
    & ]# M$ w% b  b$ o  r: ~+ X0 j- Z, Y

    5 M" l( x; G# I3 `( S- j9 J# print(content_str)  S- L! B; O% }( @1 w4 \% S
    1, o, F3 J7 Y0 T; L: T
    2) z& ]5 ?. q! I6 J1 ~
    32 j9 }& J% g/ O
    4
    ) }6 w$ b( \, [2 B6 ^5: k9 W) q8 m) f5 w, e' F% F
    6, w5 T/ [) Z& X: w! Z; }( \6 i! _
    7. E$ o8 b8 H$ C& x
    爬取结果
    # G& P& {$ B- J3 t
    & G% t4 w( c( X2 ?) B

    / i* |! G8 ^, ~7 R8 C
      j, C" D3 }. f: {/ A

    , Y) q, l$ W% W3 e然后我们再来实现制作词云图部分
    ) y% c1 i" _' p, {1 f1 y, u) }0 ]& b1 C% H

    / G6 G* P' f6 }; ]# [! m! [. a首先要安装这两个模块, E/ \7 C; e+ Y+ {0 b8 ^0 `/ r

    " ?4 F( I1 Y" v0 B8 P  y

    + V1 i; w/ ?3 y% R: dimport jieba3 h5 B( s( J' z& h/ [; d6 J
    import wordcloud3 S4 G. C0 x, u: W- \/ d9 {6 h  Y
    1
    # {: ^2 t" X2 s! a. P( }" |24 t) s- Q/ t" M
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。- @' g( q5 [5 d( \* F

    % B* X3 z0 C, N9 v

    % }2 i# q& h1 U) sf = open('弹幕.txt', mode='r', encoding='utf-8')
    0 F7 R+ \  w/ Z, [7 H/ Ytext = f.read()
    - F- Q) n+ t# E! k, O3 J, f- Xtxt_list = jieba.lcut(text)
    * X) `- a8 T9 ?. R# print(txt_list). g5 }; Y0 \. T' p
    1
    . t4 \. k8 @5 V4 {8 q20 f% Y$ [1 s+ i9 K
    33 [, g2 b3 K2 p5 z" g( u" X1 f2 ^( Y" U
    4! s! M' P& _* Q- [
    列表整合成一个字符串
    ( Z. Q3 L+ ?& H7 c( `4 C
    & w7 O$ Q& p! H! N5 }

    0 A& N5 ^# A0 W( M6 y! hstring = ' '.join(txt_list)
    . Q9 l' H3 i' M1 N1 \& Qprint(string)
    7 ^: p7 N3 A. h  Aprint('---'*50)9 B" m1 I' c( I( E' c+ v: h
    print(str(txt_list))
    5 l- R* n# V% J/ p, U6 r$ ]! `" O1
    2 R& L9 p2 k4 C8 A2
    : x$ C7 i. E2 r; z7 {3
    , F8 |* I1 E: q5 y6 n/ g4
    5 E$ x/ e# Y7 q0 Y0 `$ r+ }词云图设置
    ( j3 B0 j4 g# L; V+ V6 {3 m7 ?1 ?+ Y( w
    4 L1 s0 R( k- H4 x
    wc = wordcloud.WordCloud(- F% \  f, V8 P9 B
            width=1000,         # 图片的宽$ c% k9 m" d+ U- i0 `' y6 T
            height=700,         # 图片的高
    ! J6 l+ \, E0 I% {3 a/ t9 n  ~! i7 s        background_color='white',   # 图片背景颜色: U. X! I( ~( G8 X
            font_path='msyh.ttc',    # 词云字体/ X$ x, Q& L1 i, Q) `5 k: n
            # mask=py,     # 所使用的词云图片, {, K7 U5 ]0 X/ e
            scale=15,
    0 A* Z' \4 i6 F* l9 r+ I6 G        # stopwords={words},         # 停用词, O" z8 N+ [' f+ o2 i# U0 D
            # contour_width=5,+ @8 [8 i" k6 w! d8 Q3 U
            # contour_color='red'  # 轮廓颜色
    2 l( i% @) Y* y+ {$ k- p)
    ( N1 G# N4 a3 @( `9 d2 P1! [. q7 T8 ]7 U! M2 X
    2; q! ~  f+ r* j/ s, h" `# w
    3
    * ?6 H$ c; {! p( B9 J4
    0 w7 N. {% R) E6 l# j7 Y1 ]5; V8 S1 g8 C/ ]
    6
    : |$ T9 k. R2 ]2 e) V/ q7
      _) ~8 x/ {" |( Z4 ?% Q1 o8
    & m0 F; ?. ^5 Z; J! y90 ^' N4 u8 z( Z6 |( p! y  T
    105 |9 f% P7 t5 [" m! a' @
    11
    ; I2 a& Q: t; t4 h7 N3 [给词云输入文字
    , C2 y6 O% V" d
    + H% T9 T: G& X+ R( x+ ]5 @

    - i0 @8 r5 {. f+ R1 V( jwc.generate(string)) x3 K! i+ c9 Q, n+ a* _3 Z3 L
    1+ O) q7 L. w- Y4 T( W4 P8 z
    词云图保存图片地址
    2 F$ x) V: n1 Q( d4 h
    $ G* c( {# ]$ {0 t8 }. ~( v
    # G6 p1 P+ P; L
    wc.to_file('output1.png')6 |! n7 ]7 l( }0 Z
    1
    * q: T4 J: w! Z* R0 k词云图的过程中有点慢,大家不要心急( S1 G4 |6 I. F& p( I) O
    7 o: {1 R! f4 @% b" ?* _. {3 I7 B
    % y/ ^5 P/ b! ~* i& W- j
    这是最后的结果
    2 F1 g2 `' L3 o! F/ O- g5 S# l" o  T" r0 L, r$ w) P" h+ o
    5 J& a4 i: |; F9 R. j. O( j9 P
    没有加停用词,所以一些无用的词比较多
      E& A/ X" V* T8 [1 `8 D# E) u* A5 [' M( m4 d" q+ [! I) H5 F

    # A5 A' s% y5 jstopwords={'了', '啊'}
    # X, f+ |3 v) r" e1. x& _% J, S+ I
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。2 g0 p+ r% ?- u( z  V; V
    我们再来看下
    0 C: c  p9 M1 @+ N" _' K, p8 D4 k. W9 K

    + X6 H! @9 b, P% C5 c$ q- Y5 k不知名网友:666666 牛批 老哥我要学!!!
    8 l: l6 W( |2 _2 E/ [; F7 T
    + R; P1 r3 `: [/ R8 u
    2 [% z4 V7 f6 T! ?& z5 I

    ' C% H  q8 L/ b* A7 z4 m* B) T
    9 h7 U+ e$ k% |% a3 G2 R
    ————————————————
    ; U' o) C; O. a$ {版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    6 L* h; P- V/ d1 B  N  H原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    1 q+ o& ]9 L* G0 L( y4 U/ z! J' y7 R5 t$ U# w9 r

    - R% z" u# d' ^' f+ }" c, N
    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, 2025-6-25 17:47 , Processed in 0.339342 second(s), 50 queries .

    回顶部