QQ登录

只需要一步,快速开始

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

    ! E7 K6 R/ f: `! U7 s用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    & Y. u, E1 H) Y9 K3 B4 ]今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    % ^- T( F  P" g7 j4 A康康大家都怎么说!1 Z; D4 ?7 Z2 m; n
      c- D4 R. ^9 k; Y. J

      X$ Q. u$ x4 c6 r  F& E9 S! T, _+ G$ h" p8 g7 Q

    9 Z- y2 @% a% n  j' E+ D开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    / ?( Z  v9 w. @3 z' M1 h! f
    & J; m( ]- `' v* A$ ^+ q) v
    3 T4 T, u: x) n6 _' [  }
    如何安装模块:# G+ [2 e7 U/ w" s
    3 P7 A3 H* w. \$ K

    - d& e( M, m1 H- uwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车! d$ r4 X3 p( ]( {* @! U
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    0 H) {! [/ P( P( _如果模块安装失败了,可能是这些问题:8 f: N0 }4 A' _% v2 L
    ; S" o  S6 w$ f- t

      M2 h) Y8 y  c& \提示:pip 不是内部命令6 y! j+ ~8 U+ q0 s$ d5 U
    你python环境变量可能没有设置好, v1 d. E& @7 g0 \- M: c- i7 m4 B& i
    有安装进度条显示,但是安装到一半出现报错了! U- y) H: y0 s: Z
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB) d& [+ z9 P) J
    read time out 网络连接超时 你可以切换为国内的镜像源+ c! V) f/ k# f: C
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    ' [3 A8 _* r( y1 q你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下2 @( ?- @/ H1 k6 Q/ `' V& ?8 H+ i
    可能安装了多个python版本
    5 b, g3 l9 x8 M& `7 A0 g  |安装一个版本即可
    9 a6 f  l0 g- Y$ o- cPython做爬虫到底可以做些什么呢?
    7 [$ i1 ~$ [, H! G2 e4 J( n! Q& {) P$ h; x
    7 B$ ?& U$ n& ~6 f* F; N
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…/ F0 {4 Y, d" z" }
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    : v8 z+ R& C- P1 b- \# ^可以刷课 可以刷网课 自动 还能自动批量注册账号, E! y# G: F8 R8 l$ r: ^
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    7 i& N: o% b8 a9 C+ E" i  C普通B站视频可以爬 番剧是需要会员的
    : r8 a; W0 R; f, E( ~$ z2 p9 [9 D$ K7 f! p2 D6 d8 ~2 v1 C
    ! E/ Y7 Z5 A1 n
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)+ q/ x9 O6 i7 g) C4 b

    2 t  j; H* H+ h2 D$ u
    2 e1 C+ d7 B7 r
    1. 确定目标需求 (弹幕数据 那个视频弹幕)' ^0 q! s; U2 r1 p" Q
        确定了5 p( F, a: Q* e9 f& S2 ?; ?( n
    2. 找数据 (数据的来源分析); a: P: E$ [& l* u
        简简单单 找到了
    ! ?: C/ b7 C7 {2 _- m: C) W3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头). ^7 g% D4 h- [0 T; t% o  L
        请求方式: get / post; C5 l" d0 [, ]# V$ U3 K
        请求头:
    - \2 D/ T& o* G' G2 p    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    ) ^7 W: e! Y3 J1 w( w2 ~" \$ n    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    * Q/ _7 H, ]' S7 L6 J. T$ s8 I: C4. 获取数据 - M, M& e6 i* M3 \
        文本数据 response.text 获取网页源代码
    , }2 O4 E% _# ^. Y# P( ^& v    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多1 E! e, F8 l4 q  P
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    8 p9 p$ K0 x: }3 J' n3 G% Z, k5. 解析数据
    ( }" d8 z) I1 g8 Z    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    1 ~5 A  u* E+ e. x7 u4 L' g6. 保存数据
    3 g$ z/ I- ]) }1
    " Y* C- s" q* B9 s28 }5 U* j- \. S# }" P8 t* V
    3
    7 v. ?' q& B/ |' {6 X4
    8 h5 W( I, P( a) C+ o! K3 o4 o5
    $ k/ D% a4 K9 G& j4 F6; A- P, ]3 c# z5 p
    72 h5 w5 n( h4 Y6 y1 p0 a  H
    8) v6 P. l1 k# M9 q
    92 H9 D) x7 y2 L( o$ i
    109 R' y; W* O. t0 m2 f. i
    11
    # W( E! b5 u- w' A9 s1 u) A12
    : G9 q' X5 t7 }) D/ o3 }13
    ! F! W( A4 r9 X1 e' o/ T14
    / q4 L& r; z7 s15! d' H5 \0 i9 [* g) B( w8 I
    16+ x: v: X3 l6 B2 E) v* _+ F  F" F
    python除了做爬虫数据采集,还可以做什么?+ |& h  `, q; U' q1 `+ F
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)5 ]! X; S3 g2 v2 R. R+ c& h

    1 P1 ^6 Z& f- @8 m; N
    ' Q0 x, y) y# o+ F, }
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K: q) `0 ^9 T" y; y5 |, m" y
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;1 Z5 o3 w6 F% j  e( O% z
    我可以做到这样么?
    % B0 i" E+ a7 r" N; W( F$ r0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;+ I& P+ p4 m( U" L0 [( a7 M& I8 r
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;+ e2 j" u! x. n' K1 p" |8 a
    & p, q- l) a5 e3 e: V3 l0 \; `
    5 `6 B; t/ ^' x
    爬虫开发(脚本)(就业/外包) 可见即可爬8 y7 x& W6 o3 }% E! s/ f% q* i
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!" t0 Q; i0 f: ^9 @% B
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    ; S/ W; L7 O2 [4 b  Z  w( g# S之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!+ r. v) O% M) o* }& H: x* x3 S5 e, B

    $ _# {" T% k! l5 ?% `* ]$ Z' ~2 Z. R

    ) n2 \' d- K% N% q0 m: H8 H: u5 O数据分析(就业/外包)" u- ]1 Y/ y2 ]3 }+ k

    % E3 k3 T9 x$ q$ N; v

    * P8 i6 @+ S' r( t+ i& S自动化(脚本)- E2 q; H3 e$ y, F8 k7 }2 F
    " Z5 T% N8 H0 X% c" M* q2 ?

    0 Q, t. O* J( V  U, A游戏开发/辅助(脚本)
    ) H. K+ H' B' ^% r- M9 @$ l2 F+ V6 I. [
    ( B* b  h% n1 g7 y
    人工智能(研究生以上学历 要求很高)1 D4 u5 J6 r# j! y( `1 _* h7 b

    9 P5 c4 o% C; O$ ?
    & v) d$ a6 Z5 g9 T6 e; d
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    , k, D" R4 S8 |( N
    " u" Z9 k/ ]+ \1 P4 E: |& M
    4 o) L( z9 G* J4 Y* v" x- r; F
    我们开始正题吧, @7 x! ]6 {/ Z8 O/ K8 T
    6 l+ t# O, t5 ^4 u: i1 Z9 V9 e
    ! c- C7 B: T+ d' c# o3 @
    爬虫部分:
    9 [. d+ Y8 m# w1 d. q/ p发送请求 第三方模块 需要pip install requests2 n+ u4 Q5 {: s/ W! F% ]( C

    6 x$ W- c3 j+ J8 s0 m1 v  a6 B

    5 W7 U5 \6 |# S8 _% G( ~  E5 D8 oimport requests
    . {3 K) S  K: x& z/ Bimport re  # 内置模块! n! x  D, I; N0 o& n3 y

    4 w% D: O  S5 v3 p: t
    $ N+ {( p* B: c  K3 E& T
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196') W" I8 ?; U6 @$ U8 i- o1 {
    1
    5 f. H# N; h2 ?9 C$ Y$ o2; E+ R! ?8 Q5 O0 H  p- s
    3  l0 D) F9 o9 c5 Z5 l4 r9 ^! G7 F& `
    49 r- ?# V* Y2 W, A; y
    请求头的作用就是伪装- |" I. g0 b, w* B) Y
    ' R/ O% s; |  K& F  |5 m0 s* T# A2 g

    : E6 G& K' Q1 fheaders = {
    + m" }+ }: t1 Z1 U7 n( S' v    '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'- p; e, w! B+ _8 P& [* N# u
    }- j2 {9 Y6 j) O, O; {) V: O
    1
    7 y5 p0 b; t4 @0 t2& v" H# v7 N' }& W! }4 P
    36 e; v6 X! h- f: B# k
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    1 D+ F+ Y, m& i5 i函数传参
    ' v9 q: t4 Y: v2 F
    $ r! A$ L& y# S( i
    . B8 y& z6 G2 Q9 t8 I
    response = requests.get(url=url, headers=headers)
    # q. S& O) V4 D3 k5 j5 A1, `  B+ ?( v8 ]
    <> 对象 对象意味着你可以调用里面的方法或者属性
    ) s7 O5 D( Y7 H2 j+ l200 状态码 请求成功$ x# }" H4 M' y" D8 E1 M
    获取数据 文本数据6 R4 O& Y" {/ A0 }
    自动识别编码
    ! M" B, p3 K9 t8 T( }% N) V4 {  ]( f) F  S7 U5 W' J3 f/ j
    ! J8 B$ |- h2 W6 j" D
    response.encoding = response.apparent_encoding
    % I$ o" w: k% Q! y! t& Ihtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    7 X) f5 ?4 ^. I1
    0 g8 I- ]$ t! n" b3 @2
    ( w6 L# j9 P5 u5 v& K3 _0 fcontent_str = ‘\n’.join(html_data)
    1 `. _5 T' n& r: B' U( v2 f6 D
    6 w  X& H: b( U" D# q; D( D

    6 f& M1 u2 L1 p4 f要列表转成字符串 ‘’.join()
    9 e+ y. p5 B+ }& }# w$ bfor 遍历
    * s+ X0 y% v7 o# a保存数据 保存字符串
    ! U0 v) y, q* C" Hfor content in html_data:
    1 J8 q! l, G0 t9 N    # mode 保存方式 w 写入会覆盖 a 追加写入
    " u. a& l4 m  P# T; \: m4 l8 V    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    ) Y/ C6 x; k& }* H1 q! ?6 A        f.write(content)
    ! D; v; G7 e0 e/ \9 ?% A+ ~% W        f.write('\n')$ t# D5 k* f7 u9 ^( f! x

    # _) b6 \" h1 m

    1 h8 i3 S, P. O# Y5 {& I# print(content_str)
    ; X+ Z3 t0 V4 _2 Y1! }. T7 C  G* d& L8 L
    2) ~2 m. X+ C: q& Q- x( d
    36 x- ]8 |( R( H. x) W% p
    4
    1 n/ i, j" @9 Y3 {( T, T55 n' m+ r9 k9 n6 K3 J& x# t
    6' h0 V: n1 y  K9 |( ~
    7
    * r. V! M" o4 @# s! A; c) d/ P爬取结果
    9 b3 |5 ^7 k# z8 V; h
    3 ?- V  S, ^+ }
    ' T6 T, e- L2 d0 ?
    / `" C9 S) d* j
    ' S4 R3 U$ W- e/ C7 J6 u
    然后我们再来实现制作词云图部分# q* M" ]& @! q
    3 N% X7 h$ [" K: x: `/ n6 h& S" t
    & x# ?7 g! R' g" F
    首先要安装这两个模块' P5 S  J0 U# U1 ^& K

    6 L. J' w, B2 H4 e+ [

    / ?) d# c% d/ n% I/ d) y9 l7 oimport jieba
    5 f7 Z1 l6 A  \4 U4 @( q& m1 `import wordcloud4 E* @6 W* W5 I9 J& O) v
    1  j  N  r5 ?1 `- N6 `7 e+ Q/ J. V! ?
    2* r2 X- R( {% N+ o3 {
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。" C. L% ?: y/ m2 x

    ' i7 ]! d5 L( Z" ]
    6 @, J. |- R: _0 B$ [+ z
    f = open('弹幕.txt', mode='r', encoding='utf-8')3 N5 s7 Y, Z# S' U' R
    text = f.read(), x  `2 Z; A2 i2 @( l0 f
    txt_list = jieba.lcut(text)
    5 s; P6 Y, ~" ~7 d; T9 P9 Y& I8 F4 m# print(txt_list)
    0 y5 |- J; O3 I1 O3 w/ s1# X4 h. _4 d& I9 N* v( X' }5 Q9 [
    2
    ' ?# h8 i* G) o* K' ~2 }# s6 E' D3" e  e( n  Q# B, ^- e
    4
    ' f7 P4 Z0 D1 h# I& [1 e列表整合成一个字符串
    9 z6 @5 n; j: Z8 Y+ H/ u3 o0 {
    ; l8 r: i: t1 |! D" M1 i
    , P  P- w: k$ _
    string = ' '.join(txt_list)
    0 o/ D- t1 s/ d# }, D: A! s7 C; Pprint(string)
    2 `9 b: S# y. W6 jprint('---'*50)) p5 D* ~/ L- ?" h; G6 N0 Q
    print(str(txt_list))$ |2 G5 x) P7 }1 X, c2 K0 o, M
    1
    - ?, D! E0 T# W3 g2
    ' b  l/ [3 J  m8 R, p. z4 E5 R3
    : w' c6 w# z7 s$ i/ E4
    & A$ e4 F( L% v5 P- ?# d词云图设置/ ~1 u. F+ W/ C" h" n
    % O( m5 |; t2 e$ q# q  @% G9 ^

    9 n8 N: W0 `$ f; C, _9 K1 l7 swc = wordcloud.WordCloud(
    9 C; {2 O( ^( C& @) O: _1 l        width=1000,         # 图片的宽1 B/ q0 Y, z! e/ R8 h) _
            height=700,         # 图片的高6 Z+ {: p* ?2 Y$ ~" e! Y3 {) _
            background_color='white',   # 图片背景颜色( }/ j. I, B8 `- f8 J2 R
            font_path='msyh.ttc',    # 词云字体
    ' f2 K+ v* g& G# \# e% I        # mask=py,     # 所使用的词云图片
    * c8 K) n! j. ]/ b% u1 r        scale=15,
    8 J6 B$ n1 F7 g9 i% D- N6 {        # stopwords={words},         # 停用词
    ; h& M" A6 v! Z0 ^        # contour_width=5,
    4 P) u' q% e0 M; }4 z! k        # contour_color='red'  # 轮廓颜色6 P& t3 z. g* T
    )
    / ^! q% T5 m" \" e. P5 \) u1' X5 D! Q$ B2 V8 Z& ^
    2
    # l/ T" L) D) d( ^. C% m5 l3
    : s3 R: b8 U5 W" m* s. |: `46 J$ D# y4 h$ j. k& V, q
    5: c/ f: l- K' L4 {* Z: D4 s; _9 H
    6. O  ^3 J" _& i% w
    7
    . I& E! d! ?( b1 a& h8
    3 p( h9 a6 D4 A  q7 s9
    1 X7 z2 u& P7 c4 V. G1 ^4 M: ]* M10
    : A: |" ~9 o  a# _1 S2 K7 \3 L8 i  L11
    ; v) I' @3 H4 a- N给词云输入文字
    + \9 |, v' {8 w) a2 N! u8 X% o
    ' w; U' f0 |: l1 N; I* R

    3 T3 |8 Q+ n# u" H8 Ewc.generate(string)+ N5 w! r( {6 n, i3 u. `
    1- e+ G, @" j* H  P1 L% d& X
    词云图保存图片地址
    4 W6 r% f' k. s6 l% E4 I" v
    + a& o) n- f. U4 G+ o6 P; s+ I0 M

    $ Z3 ]  B( Z5 X5 }: gwc.to_file('output1.png')
    ! X' p. E6 c7 ~7 P" X. K5 A1/ W6 ^/ G5 D; F7 H. N
    词云图的过程中有点慢,大家不要心急$ g: W7 ?+ P$ Y$ T* X# Z( H
    7 @. q& @, o+ e0 {3 N
    3 S+ e% K: w" A. D; R/ m1 R: Q! `  g5 J
    这是最后的结果
    6 {; U! ?) G: p# l( R) s
    ; ~5 V+ b: Q8 B7 ^( ~
    , G2 H8 F5 ^$ O( w5 ^2 \
    没有加停用词,所以一些无用的词比较多! C' F8 I8 m4 y5 A& @

    - U  l4 ~4 C' r" R' G* G
    % J" G7 t2 n) U2 H) y. x
    stopwords={'了', '啊'}, b! z1 D( _5 e5 B
    1
    9 W$ N: S& }1 k5 a- H' ]把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    5 v% w0 o+ O' T; w$ X0 j* T+ Q我们再来看下
    / f: E# e2 |( {, ^9 ]  j3 y0 K* u
    3 m! g  q' \7 }* K

    , |' v0 |& V* t2 R2 i不知名网友:666666 牛批 老哥我要学!!!3 _9 Q, M' \. M+ y

    # s: t/ u- o$ g

    ) K! D; ~) `2 k' `1 n, F) N& u* C( w' [# J9 P% E

    . N7 i! k3 c5 Q  @9 h, o( ?2 Y————————————————
    # l+ w, F) Z0 y3 d* V% Y; [版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) C' Y& s+ `" E7 q
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907, O& G" ?* ~3 o4 P) j4 j  H

    2 ^9 h* x# f# t8 g$ [1 h- X
    & a! A  V( W: S% |0 Q; J7 _6 h
    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-6-16 01:20 , Processed in 0.483391 second(s), 55 queries .

    回顶部