- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 568874 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175885
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 U9 l) A2 s& w3 D
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么! k G# n) x( t. ]. }3 v6 e( P' N
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
' a4 \( t( l8 s1 R1 a康康大家都怎么说!
$ R6 d0 H; B8 ^, j: l6 D
! O+ {1 R2 m8 b! U }5 @7 u& L( ~5 t( N$ h
" s' J. V; ]8 j7 h: T! N. j
; t/ o. I7 i4 }5 k- i/ _$ p5 r开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
0 ]! a6 L' O1 g% _0 f. w, ]5 ]! N8 ^( n4 M/ c2 q: U
: @5 _7 F+ _' T" U' u如何安装模块:- m0 e, p# I, G. k
3 j- J- L X G8 C7 N
; _. g9 j. C& F7 ~# fwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车$ {% M$ j. d% @; f
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车: q4 q! a/ _6 s" x2 x* {2 Y6 o
如果模块安装失败了,可能是这些问题:7 m# a; v+ A- Y$ D# @
* ]4 h- K7 B! [! B) S' P2 Q( o% Z5 X, c! f& h4 F
提示:pip 不是内部命令
, P# d- q4 _" C& [7 ]* q8 e$ a你python环境变量可能没有设置好$ _6 {, ]' f9 J$ V2 z
有安装进度条显示,但是安装到一半出现报错了! a6 E" }9 `7 ^" U- M
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB4 g2 _& V: d' h+ s5 k
read time out 网络连接超时 你可以切换为国内的镜像源
7 O+ W. H/ t W- a: T9 I明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块: v. m4 `2 k% N5 `" i U
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下5 R) c0 w. X! @" {% ?, s% m& g
可能安装了多个python版本. z) G( v9 x T3 n
安装一个版本即可
- E2 s2 o4 X! |7 z! A [Python做爬虫到底可以做些什么呢?, `, l6 a$ n2 a9 D
, W4 F5 I- _8 s8 \7 p, Q
J8 g4 @% a, i常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
1 }( l4 L! k8 R0 b4 n12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
; r F w/ t1 \ ~5 b. b2 K. _& G可以刷课 可以刷网课 自动 还能自动批量注册账号8 U; x' b/ j7 x+ C8 c
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …; w. o1 Z" W1 f, S/ ?6 N# P2 l
普通B站视频可以爬 番剧是需要会员的7 Y5 o w0 g3 E( W- q5 s1 o
3 D' b! o# H8 y- D6 o0 V# v6 Q$ K
8 H) p7 Z+ }6 A+ F爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)! t$ N; G& T/ j* D6 _$ g9 n
$ B( v, ` A- I# e+ a
6 Q8 G; I" v) S4 `8 ` A1. 确定目标需求 (弹幕数据 那个视频弹幕)* o: x7 b* U# \7 w
确定了8 f! |2 K4 F: i
2. 找数据 (数据的来源分析)
7 B5 ` B1 p5 K8 q 简简单单 找到了
& o! ?& j1 R* \: \/ |. X3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)7 t2 a. D; X% v
请求方式: get / post
4 w4 Z2 d; R3 u1 \& R 请求头:
# u" v! V6 \* C9 T" x; F: W https://api.bilibili.com/x/v1/dm/list.so?oid=376200196 R. e" K- U/ H5 ` I6 w
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
) s& m, o1 E; b4. 获取数据
% ^% w& @* h: s. _( w8 ~0 v 文本数据 response.text 获取网页源代码
, o# l, k' a& Z1 C" K$ S9 U- d( x json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多 W! Y9 u; z$ |7 H
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
4 C6 C, a2 g( y; |0 p" c( r5. 解析数据* |1 W, T0 N$ [/ c5 }
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 . u/ T; }6 g9 Q% Z- D9 {- Q; I( ~
6. 保存数据
& v6 f1 y8 `9 C. Z X# s1
0 f$ f, u) X5 l& Q! f" }( P2
m- m; _# |" M) L3 t: R# E; B. j x t( u
4
; M+ T. `- z# _( X5( Q8 Z- q1 C8 Q% q9 d
61 @: i; A4 S3 c* U) X! A
7
" }7 s% P7 |. E2 t/ \2 d4 P) u8
; P8 z9 {/ H; d9
' J* Q/ C3 n' n4 Y107 K' m, N- y ?. x- A2 `/ J' x6 C
11
, V; ^9 W: C' E12' T j( W: \9 }6 d& Y& r
13
; ^- p4 q) E# u3 O1 t7 B$ P( f14
$ F) ^8 _- P1 S7 f6 h; L1 M15
; h1 L6 ]( v4 d" j4 G16& w/ t- c, P. K* f; V# U+ y
python除了做爬虫数据采集,还可以做什么?
; ~) l: y0 B. J W% H% x兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
2 V9 z) B+ V3 Q: V1 H5 g9 q7 a/ }! z: S5 D( m
% {2 r# k; J t. j- I
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K) r2 k+ ?# i8 P: A
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;; {% j s I( Q* @* h* I
我可以做到这样么?: Y- p2 M$ l: \ T% j; B4 B3 `
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
- ^% Z9 x& ?0 {+ H- T- t" b如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
; b4 ~; d; Z B+ A' |8 Q1 V( v
. ?- P8 s3 k% G% B) s" ^# M8 D+ D6 _' K ^0 S/ \
爬虫开发(脚本)(就业/外包) 可见即可爬# }4 Z' g6 a! [$ D. G4 e0 H z
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ R5 i8 I* n$ N
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
/ @3 @3 E6 ~* x3 S0 v% [之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
* n$ V5 }) x! x" H" q5 ^: D" C4 x7 I
3 m$ q( {! u( `8 u4 D8 f4 ^- }6 u
数据分析(就业/外包)7 |' R. p" X: ~- c* Z! ~
4 _& \" w5 n' [' o0 y( K( @) f/ d( H
1 F8 m' b9 [) \) a4 t7 I9 o3 y3 @8 k自动化(脚本)" J6 @3 z# m9 B1 t |
" k: l' H0 f8 X$ P+ a4 t
3 B) Q; I2 P0 D( m4 C
游戏开发/辅助(脚本)
4 j2 O0 O8 e5 e1 W [
6 R$ W6 t2 }( l; V ?: w' I# M. ^1 H3 t, `
人工智能(研究生以上学历 要求很高)! [ ~: R+ L; w' ~) Z+ m- F+ f5 B% Z
* Z: a$ f; l& z! U( d
+ T, n' b+ ?1 t7 a
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
- z2 Z# D4 S+ `% d0 {' c% N( W3 ~1 G! Z+ ~ m0 L& s
0 {$ F+ f+ _( ` B; [3 J2 F
我们开始正题吧2 c8 k7 M( {3 \# X4 v# b
% b% Y% m. j& F3 k9 b! ]
- h0 t# D9 c- w$ W8 {
爬虫部分:
5 p0 x) l1 X6 e. v- P发送请求 第三方模块 需要pip install requests7 N( w& P# a! ~9 r
9 e" B: n' e) R4 e6 j; L6 ^- U; ?4 Q8 }; H; {: [" d
import requests
# D. x% m- k, ?import re # 内置模块
# }9 h$ a8 W5 c9 q0 ]) G0 a3 a. @; i. x+ f; B
" }$ ^0 a5 D" Z. `0 @( Murl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'4 h, u2 B; U3 c
15 P m% X4 ~# Q! _
2* V* Z+ z, Y1 d0 J
3
. G. H( G) F8 @7 o9 U# C: Q' J( U4' C- f: x, F- s) ^/ ?* f1 F" n
请求头的作用就是伪装
4 B5 x( }( k0 Y2 B' g
* m1 d* b( g4 d8 [% K! `
. @+ c n# F$ E; Z5 wheaders = {' H6 s" V5 |) |2 V+ h
'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'+ p3 w8 p( I# T- E
}6 X- N1 f( ^ Q5 E
1" T Z- K8 v$ o+ m3 ^
23 K; ^2 x# Y8 d0 d4 r0 S. V
3
6 G" G& o1 @6 L. D( A模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据5 b" k7 h( O( Q; i
函数传参+ ?; q' ], v& r4 B0 I/ [ C
' [. B' p- y4 L. d- F2 D: {) n6 l' K( Y- W- X: `7 d0 L6 ?2 s
response = requests.get(url=url, headers=headers)0 T. v6 O+ d* Z
1
* I8 j' L! d5 t# ~<> 对象 对象意味着你可以调用里面的方法或者属性
& @- U4 K! j) u3 Z7 Q200 状态码 请求成功1 I' F: [3 v6 K+ e& J4 C3 Z
获取数据 文本数据 y1 Z$ n8 I2 M: u1 b" Q3 L( ~2 p
自动识别编码
3 F v0 z: w! C3 w6 @4 P3 b1 C8 n7 I+ T- v: q/ u
" R: g* N- C9 \response.encoding = response.apparent_encoding
8 [$ K% a% q: ~7 ]+ R7 phtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
, m- G# M- u1 V7 d7 ?. A T1
8 F6 r1 L& [% E2
4 I9 X3 {" F' x1 R$ Econtent_str = ‘\n’.join(html_data)
5 i0 V0 j1 s% @9 W" r. ]0 \* k# f- b; E$ M R5 f- L4 O9 J
) d0 J0 V1 A8 V. J. Q/ ^0 s1 Z
要列表转成字符串 ‘’.join()
- b! e8 v Q4 g5 J9 Kfor 遍历9 g l5 c2 c* @& c
保存数据 保存字符串0 k! }$ \. b/ D
for content in html_data:3 H* f9 J( b, h0 O
# mode 保存方式 w 写入会覆盖 a 追加写入
8 J2 E) m2 d5 k$ X3 `2 C with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
7 I4 S) l3 E7 [# w f.write(content)
' Z+ {, p/ Y% } f.write('\n')
4 g& M/ C& j( h' e# ^
. Z3 f9 r. O, s# c% s2 t/ ]& I
8 D3 j& K) x. |" ~* U" J4 i) D" g# print(content_str)
9 Z9 a- _6 X2 C4 Z+ q; W) w1
4 c! x- \* @ p5 z' e3 [0 d6 Z0 T2, l/ `* V$ U" u+ X, o5 v+ t
3
: z% `. E1 V3 M* P- f+ p4% T6 v9 r& r6 T0 _$ \0 @
51 F& {# @) @8 H" d8 z# N$ X% H
6' W7 Q( k, d- o
7. u% W. J- D7 _
爬取结果; ^; C5 _# f5 V. c$ t8 Q# k
) U1 M! [0 c* z: I
& Q: C* W$ t0 I0 m+ ~) [# h9 p
" \3 ?; E2 K2 Y/ G1 y& o& }9 U2 @) ^* {- n- O; ?9 L
然后我们再来实现制作词云图部分
% x+ D. t% t; y! I) Q4 t" F4 Z' k3 {# f; f& W1 j: }. P) G
1 _3 F, x% f: R+ r# D7 L- ?: G3 B首先要安装这两个模块
1 J7 R5 f; o* n- X
: `+ f' Z. x$ f' P1 _: W: i- _
6 j' ]: ]; l/ n5 x" D7 Kimport jieba
- Z2 C; B0 k5 a* U% f. b L( p1 nimport wordcloud1 C& _0 C. i+ W6 v) p; G g. P
1
5 v0 M$ w; a; w% o; K% s a2% A0 Q* Z5 J+ b+ Z' N
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。/ b& z# i0 C) e+ s; h0 Y
& C) l$ Y: R) M4 S
) O0 c) I$ F% c3 X
f = open('弹幕.txt', mode='r', encoding='utf-8'); j/ t$ P* Z4 E/ f# T& J0 w% }% |
text = f.read()
+ q, n3 e" s0 k& ?& L$ Ttxt_list = jieba.lcut(text)
" r& I/ V2 M9 b! l7 L: F8 g* z3 c# print(txt_list)
3 B, F9 E l, K8 R- s1/ g" {( Y" M! Q: D8 \" G% t- k8 U8 ]
2
9 f4 Y& T$ ^/ f" M3% A0 ~+ S- n. E9 ?& i
4
) }, n2 F! W3 k# a# I& X) L; S& o/ f列表整合成一个字符串
0 e* o, a0 ]+ y9 k( b [7 a8 B4 j" ?6 t7 i! q- q5 `4 B4 @; u& Y
) m4 t1 S4 I& ~, K {/ Rstring = ' '.join(txt_list)
8 h+ N4 E0 V6 X5 n! ^# H3 N4 f$ Uprint(string)
z0 t* ]' Z( d/ H7 W- C3 r& cprint('---'*50)! R; T( S+ o6 b+ g$ {
print(str(txt_list))4 a* y' b1 p- j0 L7 o
1
' u- `0 U0 v; h: Y" Q2
" h) ]/ N' b3 O3 R) I. N5 P% P& O37 t' |* D6 _ V0 L y
41 S5 d2 O& U) ^2 N3 V! G
词云图设置7 ^3 D8 R7 X9 ?
3 q6 s( \" O6 \7 i
3 U' K" }$ v( t) X0 ?1 V% {
wc = wordcloud.WordCloud(7 f( u1 v9 g/ G/ l
width=1000, # 图片的宽
# K/ F9 ?/ k' p8 e* f height=700, # 图片的高9 f; S- j1 \' `" z
background_color='white', # 图片背景颜色6 ^2 U4 N# L/ D. s! @) k( |
font_path='msyh.ttc', # 词云字体, f& S& ]7 P- J0 `6 a6 a
# mask=py, # 所使用的词云图片
. m5 {9 G& [- K9 i6 B scale=15,+ A0 t3 |0 T, N6 t" M1 v: M
# stopwords={words}, # 停用词
( a6 c; }& }5 S! h1 I) s # contour_width=5,
8 p9 D: y M( j, l- r' w # contour_color='red' # 轮廓颜色
0 _8 O. m0 R$ ?, I: ~8 w)
4 t. h' C8 Q2 G1 g3 Y1
1 H7 O4 X9 F7 s( _' z23 z) g$ E4 J! e% n+ D' s. p
3
4 b# X( i$ ?- ]# L4, n2 Y! A# C, P' N \- f
51 y4 y, {5 Y1 |9 R. j' |
6
6 @! C/ Q7 z. D( B7
' @, E$ f- E8 h- ^0 H o3 @! M( l8
* z" v* u: F9 L {9
8 B% |* {) s$ q4 @0 L10! v3 T3 ]" N7 I( j
11
) f/ A( h0 G3 ]给词云输入文字
* a) q1 Z. ~9 H6 E( f
- s6 s# i( [6 f; W. e$ H+ @5 z2 t
7 k! S3 y( y# P9 C( F+ \* a9 w' x4 vwc.generate(string)3 v8 ?8 n4 m7 p; M9 h
17 d$ s- v4 `# y* x6 e5 ?
词云图保存图片地址4 X+ Z2 L$ [0 @+ \, e3 r" s$ ~
" J) P+ V) u; A, n3 N9 B: |- m, P5 d- n$ Q* U9 |
wc.to_file('output1.png')
: x- `8 H) }" r' x4 I4 _- _: f1" E% h. g8 K" M' Y3 N/ X
词云图的过程中有点慢,大家不要心急" j% H/ |& @4 k0 O0 q* E
/ y3 v1 c2 c+ w8 |# w: ^
. c! c9 _% G2 D8 W9 V6 X
这是最后的结果
A5 I7 b/ @# h) ?# b* t
& S$ G' Y/ T1 M& R/ Y; t$ n
: j6 U3 P. f- Q- o没有加停用词,所以一些无用的词比较多
5 T# v! d3 g' j5 H2 ?: y$ N. E; c' m- J6 ^& K9 l+ m& a( w
5 \# S0 R" n5 s, i% c3 Hstopwords={'了', '啊'}
3 ]8 b! e% A# d3 l8 q11 h0 T, A3 r* T" W
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
3 }5 f+ [. \7 {$ e我们再来看下8 y' O9 {2 }, s- k
1 W! r$ q) D( M1 O4 x# p' M! g, ^
9 P6 A! c/ H% ?3 v& _不知名网友:666666 牛批 老哥我要学!!!
h" c9 P$ g( B/ n
7 O: k3 d2 q5 V
, x. b/ Y( c9 g7 d5 e3 J1 j& G: t
% g' H6 ?. [3 D- k% d
& |! G0 \5 N9 C( s+ V' L4 ?————————————————
. `. M5 }: T; W+ q版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, ]& @1 e1 _: Y/ U* N) q原文链接:https://blog.csdn.net/ooowwq/article/details/1192119075 z0 L8 Q" d* K; q6 i2 V
$ o- ^; T- V: w! z
' W8 q3 e: _ O% j( u |
zan
|