QQ登录

只需要一步,快速开始

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

    - ?8 v8 E9 a% K& M# u, Z- t用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!: e% z- g6 J+ M5 Q
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    : b  ~$ L) k, B3 i8 ~康康大家都怎么说!
      S+ ^; u; l6 N- @8 C& e% x2 T$ ?" X) S7 S! P8 N" Z& X) J
    6 b4 Y! M$ e# q( b- M
    9 ]1 @+ d1 b! @' j5 ?
    1 @* x9 q) |. p* ]' C8 p
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    + g7 K8 Q, i8 L  q* U+ q
    " N5 O% ]$ D8 F) I3 e
    + d* F, r% p3 D  |# @$ I" D
    如何安装模块:
    1 Z: g4 I& i- f( C! e/ U" m1 O$ E" x2 L! D# [! }0 ^- X
    & _3 v1 U6 O$ V& H, j% Q
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车& _+ L: ?4 Y6 K, b4 n$ z  R  ]; Z
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    : ]  a3 `7 s; u/ d" X, C! ]5 H如果模块安装失败了,可能是这些问题:1 w7 G/ d  ]' D) X* ?, c8 d! m

    1 V) d8 K" x. ?7 T" E
    / b1 _) `, t" o3 K# Y' I
    提示:pip 不是内部命令
    - |1 o* w( D2 R. o0 z5 O6 d你python环境变量可能没有设置好/ `) I) C+ X' b
    有安装进度条显示,但是安装到一半出现报错了  {: t' c2 u. O  L( k3 W& o
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    8 `( Y7 a6 ?+ E+ r: T; Tread time out 网络连接超时 你可以切换为国内的镜像源
    9 \7 q% Q* a3 Y& n7 s: e' \明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    - X2 p( n0 d5 I! V% M4 }; u- B( E你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下0 v, R# \, I) @% p, o
    可能安装了多个python版本
    $ m: J0 ~$ |! v3 f' `3 `% O安装一个版本即可
    8 t8 x" X# V4 ]7 }% \) y( `7 WPython做爬虫到底可以做些什么呢?
    8 k) b9 V% j! D$ B+ e7 I
    ' x1 }1 M7 T! C6 e, V% h) O

    9 T5 d+ l7 M3 T0 F+ k" o常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…2 L0 L' |. x8 `# }/ K" j' D8 R
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量. h1 d' ]/ `. P
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    5 a1 m, E/ M. u3 Q* A$ Z. I( P模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …! d' I" C8 X, u# [' w% {8 M
    普通B站视频可以爬 番剧是需要会员的! f& C$ x9 ?: L- O3 d
      @9 @$ U" T3 \
    3 X! ^; N* X' B* O& @
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    $ L' z: m3 t+ ]' q
    + V$ Q' O7 m& Q% p5 t% g* R
    1 l, X" L7 L) `4 O3 [# E
    1. 确定目标需求 (弹幕数据 那个视频弹幕)
      p6 q2 A( O4 t5 t% D$ z  Q    确定了
    & q- I1 f4 N# Z( [% U+ Z2. 找数据 (数据的来源分析)6 |! H4 r. o9 I3 ]0 ^* e
        简简单单 找到了0 w! @- `" u7 {
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)) i" u# k) `* ^! c8 r
        请求方式: get / post) X+ H; \0 w# m) ]# g
        请求头: # n/ ~+ p' [# p! O6 C& O7 |6 O% X
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    $ o: b" c6 x& b    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站); m! c0 P% M! y8 s' p
    4. 获取数据 % y+ F$ r: a1 ^7 V' @% T6 q
        文本数据 response.text 获取网页源代码$ f. b0 @- P6 ]3 h
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    / p7 V3 s0 k' a    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
      a/ j# N9 ^: E) X' `5. 解析数据
    1 B4 L* X3 T/ H; n    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    . H4 V7 g) E, z' y$ W: r6. 保存数据
    6 a! D5 P' c% M9 l1* w+ e  X$ z# q! ]
    2: p; e* e2 O% S  P
    35 ^. H5 D% U9 m5 h6 C& R& ]. ?
    47 L+ M6 b" s- p
    5
    * L$ ~+ i1 A! E/ N$ H. y7 b4 y8 [62 E$ N& ?, T" w" o1 x; S/ E
    7
    6 \' ?! s" Q% G8! ~+ I4 J1 M$ _2 s' `8 F- L% D' a
    9
    " g; N& D" U/ E" z" Z2 B10- m2 t% E# o& i+ y1 z
    11+ S% n8 G: v7 j) ~
    12
    + p- K; S3 R  ^3 I13
      C) `$ n9 e5 [$ p14" ?& ]9 F& h8 [1 j" v
    15
    , |+ i1 v, w8 k' l* M( e& f16
    , D% p% X' |) `$ R* T( Ipython除了做爬虫数据采集,还可以做什么?
    # n) Q; M% G, ^3 v7 k' n兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    1 S$ m4 ~9 A/ y" W/ i
    ) U" |! k. b* F
    7 k3 F. l# b/ P: b5 u" _
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    8 C! {1 m% k6 ?- y. Y; X. c比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    5 a& g7 `, @" I, ]& ^! G9 Y我可以做到这样么?) f" r4 t0 `: o7 @" Q
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;- @9 w7 F2 _8 C0 a2 n) O
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    1 ~7 P' e/ E5 y1 V, Q: e1 c9 Q: k) g$ [7 f

    7 a. L2 p: s! n6 ^) e! d- @! b0 |4 Q爬虫开发(脚本)(就业/外包) 可见即可爬
    % K. q$ c6 A$ D虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    8 W  E9 q1 Y/ d' V# e很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!8 _4 B" K( V0 r, q& N& f
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    . `- R9 M8 D8 y, E" y4 h9 Y9 b* z/ ~
    : H/ W: [4 ]( G
    数据分析(就业/外包)
    ' [8 f! A4 i8 k9 T9 p8 }
    . S) C. R3 ~3 s3 ^
    + z2 u% q7 x+ B4 O: \
    自动化(脚本)
    2 ]6 z# m# y# y$ J/ E$ Q: H
    " B: [0 f+ M: P" I1 o
    ; E4 r8 i3 o: j2 a
    游戏开发/辅助(脚本)7 ~/ y# K% ~% Y+ D: s7 J7 o2 l4 ?2 v

    1 W3 j3 D, P9 Q( \
    ( l( R; a8 O, a1 k; z; O8 m
    人工智能(研究生以上学历 要求很高): Y. Z# @$ M) H4 K* |
    5 c# X7 w1 Y" Z' e4 O
    + q1 F/ T# c0 o1 }1 c4 c1 ]
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    ; r" z1 r- J7 c" b3 _& O* }1 Q% x" _& K% s5 x+ t: g
    5 `5 C6 f2 Q: L/ D$ U3 S9 Z/ r% g/ g
    我们开始正题吧; \' \" j' i8 H0 G- h# @7 z

    5 o& |2 q% }% w

    . a9 D4 n2 H; t  G# @5 q1 ?爬虫部分:
    * ?! U  E4 y8 z( y+ [* R; o发送请求 第三方模块 需要pip install requests
    * C  D% I, t$ }, `% X& ~  O' z4 N5 ]! \; z- |0 @! |5 q& |

    ) K  p7 D) y9 n2 h' k, R1 N0 Rimport requests
    1 v- l+ P2 ^! {import re  # 内置模块' P0 t0 n4 s6 o9 S* I0 |
    4 d6 p7 i, N2 Z! s3 {

    : k+ A' b- P* e" \( xurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
    ' a# c0 R! X8 ~$ c! r6 `! o1& ~0 v  J1 d+ x9 _6 G) F
    2
    1 f) |2 I9 m7 d" q4 k3& R* h& P' U) Y8 R( Q. e3 V, X# Y6 C
    4
    % O. u: W# ~- r. a% V; u" n/ }请求头的作用就是伪装
    0 q! }8 d) u7 K* O
    + y, u, L) _: _, U4 c' @0 I

    7 N7 G6 l; L% K3 \6 jheaders = {, h+ o8 A7 j- V2 {& A
        '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'* @) q7 t) _2 g0 W6 o
    }
    0 ]! F; w6 H* m9 L+ j0 V3 @1
    / h$ U" h: a4 B# X, G* v% k28 C9 j/ c5 Z, i" e& O4 W; C& \7 Y
    36 W- q5 U. C* d3 s# u- \
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    . Z" `8 }! _& P. V/ e3 I6 I函数传参. }4 Q6 t2 q* p: T

    ( [; G0 r6 n0 M# y  W+ s7 T% \# @

    1 _3 k- i) a' w, Lresponse = requests.get(url=url, headers=headers)
    6 Q3 F2 B& ~, \' K5 R0 U1* A% v: h" K- X( [. q
    <> 对象 对象意味着你可以调用里面的方法或者属性
    ) I1 U8 ]8 O% D* b" V6 V3 p0 t7 q200 状态码 请求成功% v  b0 e2 P3 y) E
    获取数据 文本数据
    4 B" `& Y. v& z4 y0 w/ P自动识别编码3 S5 y  _0 d+ M- j
      n* t: |. [8 w9 b+ q: q

    % K/ h; ~" ]* T( N9 Mresponse.encoding = response.apparent_encoding8 u5 X8 e0 r4 u9 N# h! p3 |% `
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text). J2 M6 N1 y9 \
    1' W+ b! K" N* @/ f: g# T
    2% A, O8 U8 Z- L" T& M7 p
    content_str = ‘\n’.join(html_data)
    9 m4 N, s  X8 {+ N5 a; @' n) \) m6 h4 M3 P( z+ d
    8 X( }8 O4 I+ O
    要列表转成字符串 ‘’.join()+ s6 j% m. {- x! p
    for 遍历# P4 r# S+ g* Z. G1 v
    保存数据 保存字符串$ p' x8 R; b+ o. y; ]+ Q% G
    for content in html_data:
    $ T, w, S0 ~5 N& s3 k; D2 ^; G$ R- [0 g* C    # mode 保存方式 w 写入会覆盖 a 追加写入
    2 Z; E' ?2 m* v    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:, _& Z0 k/ e1 E/ B$ Q3 z! X
            f.write(content)6 `; E3 n% l2 F' X/ j3 F* ?
            f.write('\n')- o! |2 c6 j: s! l; U$ Z
    % }/ ]( N$ s3 _5 w9 f3 b( ]

    " V5 S0 |) B+ z. Y( ^+ \# g* }! o# print(content_str)- C0 z- `  ?" a# L  O/ v
    1
    / x. W8 O) c0 x! _25 H/ E8 \4 f) |0 `! l- `
    3
    + M1 y% ]' O( s$ A, `4, d& Z1 Y" @9 x, v1 T
    54 w2 o1 b- e& s& a  j8 |
    6
    , r% f3 ]) U4 O2 ~8 l9 J% J7/ H, V! c: X# S
    爬取结果2 y6 ~+ z$ a! X/ f  L0 o6 T; P

    7 O6 \1 i  p7 {. x" ^
    7 d; C" M" w- B: o% o
    # O6 R/ b4 |4 u2 ~

    8 P6 P1 p9 B8 U+ |# I然后我们再来实现制作词云图部分* U" _) b4 i/ K) N
    " c: T( j( w$ ~
    ; o2 H1 Z1 y" n3 N5 o
    首先要安装这两个模块
    4 X5 q2 n$ T$ _3 }. ~
    7 K4 l$ W& {0 ^. b  q9 h

    # M2 q; D& T8 G. c2 a" Y; f0 }# oimport jieba/ w9 q; w1 |$ v" S
    import wordcloud3 B' N& ?+ O% _; z8 @- ~# P
    1
    5 }# L- }8 E, P4 e# M1 U2
    : {" p  J; N, f6 ^: ?一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    , L# u, O) Z6 ^& u8 J: n) o/ i* i; n
    ( j: f( q* T5 v/ _
    f = open('弹幕.txt', mode='r', encoding='utf-8')
    ; ]- d# u" d$ n3 Z" C& Ltext = f.read()" Y& G( L" K# h. E
    txt_list = jieba.lcut(text)
    0 p9 I( K& F6 v  x# print(txt_list)
    . Y9 @- I1 d( I& Z% T1
    3 S: s4 ~0 h3 A. j% }2
    9 _) p7 E/ Q7 X$ l" A+ P& X7 Q6 f3
    , h- M" ^: D7 o+ J6 `- W4
    3 {1 w) g" M8 [# b& |0 F' Z/ I列表整合成一个字符串6 i& ?# w4 O9 e3 u+ u
    $ z- o0 B/ C8 ^- Z5 }  H) x& I

    / c4 j5 t8 E! ?( f- ?% v# Fstring = ' '.join(txt_list)% U' R7 j  T  k8 U! ~
    print(string)
    ' q* _. Y& y& Q) Kprint('---'*50)
    ! u7 G9 k% N% r  q7 N& A! rprint(str(txt_list))
    & D2 g9 Y( F, r/ X3 S. i+ s/ [: }- @1
    ( e3 f2 o3 [! b, q8 h2! P0 H4 }- o/ g. ?
    3( L- m& Q) ]2 F% g7 _8 Z4 M( g
    4
    3 x3 e# R. b  R* Q' C; g) h词云图设置
      c5 n8 r3 [4 u# P/ R/ v: f
    . u9 y- w2 }4 `; B8 q9 ?. E% r

    * k6 B# X; i& G- D* \wc = wordcloud.WordCloud(7 n4 K% J1 u/ W1 d3 E8 x
            width=1000,         # 图片的宽
    , e& }! Q2 a8 [2 N  i9 L4 ~1 T        height=700,         # 图片的高5 v& c/ ]  c6 N+ T% ^
            background_color='white',   # 图片背景颜色! Z' {3 E; S9 E) O7 O' u) M
            font_path='msyh.ttc',    # 词云字体
    3 w3 y) ^1 f0 O1 I- D. }; z  O- y        # mask=py,     # 所使用的词云图片
    6 Z7 F. ]# w5 g* D, W. j1 r        scale=15,
    0 ]* r- j# \6 s7 c, S% N2 b        # stopwords={words},         # 停用词0 g8 E2 {' y& X) C$ }
            # contour_width=5,
    ( Y, Z3 K: `% O3 m        # contour_color='red'  # 轮廓颜色5 O" I4 J9 t' U
    )
    0 k3 M4 J: K% S3 ^' B3 d* Y; [8 O1- d$ F( Y- Y$ Z' x- D
    2& M1 _" q& N* t3 I' Z; w
    3
    1 @- s* w9 X- \4
    4 M# i4 j& \& i( h. \/ U: }  r5+ R: K0 E, m. _; Y4 }( M
    6
    1 h( ^# m4 x% z& G) E5 P7
    0 g6 h" l5 w' y- l8 P; K+ b- a0 M  Y8
    ( y& j, P% Z' }4 P) Z" E9
    6 s' X/ d0 c) k, G3 w% b10
    . V7 K% D* ^. j3 ~5 a11
    9 X4 |+ o4 d3 ?* W/ i( M! T: |给词云输入文字" C. {8 Q+ g1 s9 J6 u4 K
    : u0 O3 r) Y, o; D9 h0 z+ R( O
    + G' g/ G- q+ Z1 Z
    wc.generate(string)
    9 v" b& L% i, f3 c. x1
    8 P- ~( G- [9 H  U) U5 N  N词云图保存图片地址
      j& I, Q1 F' v5 [& U) Y& z0 L
    8 K. X$ Z* z1 E- n& |
    wc.to_file('output1.png'): P: Y. e. L) [$ B
    1' E, W- y/ v, @# a* X+ M& K
    词云图的过程中有点慢,大家不要心急7 e" ?4 L7 l4 C- X& H" n

    8 H+ _5 H1 g9 ^# ]* i" f3 x

    : C: k: `+ u6 k2 Y这是最后的结果* @" @" u/ w( M
    ' |. f+ y+ I! w7 e; y' h$ I8 _
    , h; {: F% m+ g
    没有加停用词,所以一些无用的词比较多2 b9 `' h  ?- t( H1 \0 ^
    1 i& ?& k7 L% e3 A

    . O2 q3 I' L) v- y  |1 o2 Pstopwords={'了', '啊'}9 c. a1 T6 P) E, w
    1+ d2 n9 t) D: u, D& W5 D
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。0 \& N& z2 {" z  G( c- P
    我们再来看下
    7 g6 }' S9 C$ e, U/ Y' h, _- c7 b: Z) e  e  U
    # g& u+ o7 |: c
    不知名网友:666666 牛批 老哥我要学!!!$ Q3 R. ]. g% l7 R2 f, o2 u: l! `
    ; s$ \; t" g+ ]; z% b- `( E
    2 a8 y: n5 F3 I- `; D* D

    ( A  k( I9 r* W4 N' H! u% b
    4 \& m  I+ V4 ?" e; }+ f- }
    ————————————————4 X- m0 Y: G9 B. _1 H: l! ^
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ C2 Y- ^  N" i; |7 a
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119070 ~# u- _+ N! x; C  L

    2 B) l3 k3 [5 u1 {6 L4 L, f) N2 w5 P
    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-4 16:12 , Processed in 0.331207 second(s), 51 queries .

    回顶部