- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563353 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174229
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
- }5 M5 U, t$ q, P用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
2 Z! @3 T( [7 m1 E: N5 j: A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!/ V% s V p$ C3 u( P+ Z3 G
康康大家都怎么说!& F/ y# G* I! g, I; f. k
7 v# |. S" O0 g8 I1 {
) Z7 x7 y, y7 N6 K( r
9 q4 @3 {8 L% a$ I1 G, d: x& o
* w, n g# D: K2 x: X
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。) _3 `* F9 i, y5 C6 x
6 ^3 G( g1 g' M: J+ D/ O
4 k- U1 f+ c0 R, ?
如何安装模块:
0 b& {, @- Q$ B8 c1 q2 r b; c
* F9 m, B. k5 s s8 }! F& X/ S- f7 _+ b: G% w* u: p
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车' [% [' L; o! ]! S5 ]
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
8 n- x: `; x3 R如果模块安装失败了,可能是这些问题:: ?1 d; o* y, k4 o# d. q
% i/ K8 b. l2 Y' _6 t1 [3 o: n5 m4 f% I7 i
提示:pip 不是内部命令2 |& B- D. u4 J' o* K
你python环境变量可能没有设置好
* _" J, Q; H' S$ q2 @) v: ?有安装进度条显示,但是安装到一半出现报错了- @1 t/ R! ^# X1 p8 b0 n) x5 D9 x
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB$ N$ |' V" _- r o; [ x5 `
read time out 网络连接超时 你可以切换为国内的镜像源
) v" c0 |1 w; p, k明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块! H. ?$ K$ R3 ~: K1 y# P
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
: a' n( N5 A, }& S0 w3 ^. e2 }可能安装了多个python版本% P) W+ a& U; ?( s! z5 y# G
安装一个版本即可( c9 G0 J: @3 V( {. I3 p. m
Python做爬虫到底可以做些什么呢?3 i$ v3 _, e; u9 s3 q$ r9 H& d
@; ~6 M/ B/ H
/ Z) F- C. v1 }4 t3 w4 |$ x. E常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
/ t* s6 ~) g' x0 L ?0 n7 c* c; r12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量/ f! ^% |2 A! Y, h* k* @' |! Q
可以刷课 可以刷网课 自动 还能自动批量注册账号3 I: l% c. ?. D$ C; U z
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …: n3 f1 i% ]- {1 y
普通B站视频可以爬 番剧是需要会员的+ I" N+ C1 Y S w9 w4 Y6 @+ `9 A
7 c4 J9 m, }" i- v' i' P# j2 {& u" s& p; G
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)& c% o, }& L9 s9 s
: R4 i. @6 G8 ? [$ b) f) o% T: A# e1 p3 } {
1. 确定目标需求 (弹幕数据 那个视频弹幕)
5 `3 m& V, }4 i L7 H2 A 确定了
9 w$ W! N+ y7 |' Q0 a9 l; v2. 找数据 (数据的来源分析)
! E/ }# w7 v7 w4 z 简简单单 找到了
. @4 u. ?' z- ~3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
c# H9 B; b8 U9 c 请求方式: get / post5 r5 q/ K0 E' ?; M4 P/ R q
请求头:
9 H3 b, u3 h: d$ j" R https://api.bilibili.com/x/v1/dm/list.so?oid=376200196( c2 B& Y0 I3 H" y. V9 q8 }
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)/ m0 J& p i, u Z! {# t
4. 获取数据 7 g, r0 s6 B l, O7 x
文本数据 response.text 获取网页源代码- [8 q7 |$ D- Q ]
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
% S2 M7 N, u- G+ m7 K4 x 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 ' Z4 j0 ?' ]# c& S
5. 解析数据9 m. u0 b( S& m Q. r, A
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 1 l' i, Q/ N6 C0 ^
6. 保存数据
9 Q1 s* c7 O9 ]' y, Z' ?8 S1
5 J; @. b8 \7 u2& X6 d4 \7 B- s" k2 v( I
3
2 m7 v' l, J+ w% v' F4& ~8 _; @- f5 j8 ~4 _( g% U
5
5 R/ v9 i' X! W1 J; e# G5 `66 U5 F; w c/ l% f% s3 B4 i7 r
7
, f, }3 c9 T1 T5 ~% k) f86 m- f0 W4 J, h1 m0 J
99 h8 O3 D1 d6 [
10
0 h' ?. e$ z4 ?7 Y5 f+ a, v11
6 m3 r$ e8 D t/ I3 |12
1 H$ h! | A" {$ t8 \# _3 a13% d) p f( U, o" ~# E: A- Z
14& [" p6 s A' ?, y, S. a) M
15
0 |# Q8 X0 i: r# _8 \16
) w5 F% m9 n3 M3 gpython除了做爬虫数据采集,还可以做什么?: G* ]+ y5 ^, j
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
# c" O1 G$ K5 ?; s" P2 t9 D, j% r
! Y( D3 y. J' u# X0 e6 O- z) o: ]8 p3 |5 p! S; m; e/ z
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K2 X+ x/ H6 I0 y H8 }; K( Z
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
4 |# ~& C8 n0 p- a1 P* z我可以做到这样么?
/ v/ C2 ~% W7 g0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;! K+ \' N- i" b2 ^9 C6 }$ q! G
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
( m* ^ ]) M1 s0 T! `# u) H8 j. N
" \* x" w$ U8 I$ e5 g( v
1 ~3 {0 R: p8 L& e) }0 K6 H爬虫开发(脚本)(就业/外包) 可见即可爬% x/ H- ?8 g( J8 \/ _
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
, V+ w% p- H, a1 ]很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
, r2 I' q: q( E& }; w之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!- O D, E( C4 N
0 A- N% A! T+ ? Y# }
1 _, z5 P9 A p7 ]6 i
数据分析(就业/外包)
5 \, f+ R/ ]! f/ G3 M( q5 [; A4 T5 ?, m( T
& g' R# @- K( ~. Y% t% }
自动化(脚本); N% V' m. n' u
1 E t" x: u2 Z! A6 Y. ]$ ` E9 |) s# _ w% I
游戏开发/辅助(脚本) d: R" h9 W1 P3 X I
9 w# e. A; H( O8 ^
! q1 q5 a( N* W
人工智能(研究生以上学历 要求很高)6 }5 G1 J! W" v7 R- ~& P
) J7 c9 \+ G$ _# O/ b; g R3 Y+ T; h
' D& P$ [4 E% E! t等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
2 Z' G6 J7 n/ Y J; m/ D- |: e, k9 D7 e* V+ m
1 L' ?) H9 c- c5 R, e: o' a我们开始正题吧 A2 ?4 ~7 O6 ?5 g* N( `5 \
. c" N, g" q. A# h- q
, P9 z: e7 M8 U5 ~3 `
爬虫部分: p& r9 B2 k7 K0 w0 d6 V
发送请求 第三方模块 需要pip install requests' I: c/ \" ?" g# w h
# m4 _7 v7 a" T2 I( z4 @
; e' t5 R* v0 c M Cimport requests3 J( t8 {" G# s9 d( |
import re # 内置模块7 u7 x- P4 ~1 Z* v
6 f: A' [, B: O7 c' |& Q
- A1 P& [6 V( i Nurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'+ Z& | t+ Q- O4 y8 X& E5 M# R. n
18 d* e) r) ?- v- |+ X! n, v
28 p i# r$ d( c0 h
3" ~" m" @. E7 ~5 p4 c7 ]. V8 x
4
5 ]# _; X. |1 x5 `请求头的作用就是伪装
% J6 I1 p' t+ f0 T K2 e7 _# t @. L$ P3 g; A0 L8 U
# }+ v, P' g! Fheaders = {
& ?$ h- R7 K# L+ y" C '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'' k3 H! ^" z# v+ Y8 j7 r7 b6 G
}
% [( x! _5 f( I2 R1: u' n1 u; _% ^ P0 E
2+ k$ ^7 s# x4 G! a6 _7 Z
3
1 {" r) [( n6 e/ M模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据7 F6 A) i6 }; ?8 p
函数传参
$ a# j& N0 T4 R, \0 G2 l2 }% ~
; H9 y9 P1 |8 o [8 L
- z$ @0 R5 R4 P1 z, R7 jresponse = requests.get(url=url, headers=headers)
: Y2 Y5 W( \( f: U5 y4 I1/ P6 G# k* l. M5 i7 i; h( S' [
<> 对象 对象意味着你可以调用里面的方法或者属性! X: e0 n8 ]* V" G# O. a" ?% w
200 状态码 请求成功
* |4 p0 Q4 s% x! l1 ?获取数据 文本数据4 |$ s9 b8 z/ o+ x1 ^
自动识别编码% {* U5 ~& o! D0 I7 U1 @
7 M& G# u: m0 y# A
) B5 p ^( }) Presponse.encoding = response.apparent_encoding
j6 r6 ?. E; }% b$ {& R whtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)8 o4 N; ?0 I" n% `* h! f
1: e) i0 d- K% L5 [8 M: T/ A' }
2
# k) a2 q' P1 f7 B( Acontent_str = ‘\n’.join(html_data)' B: i# Y5 \# r: b6 x
9 f: e. c* T. f. k6 O N: U
m! X9 k, [$ H" l. ^要列表转成字符串 ‘’.join()
/ I1 P% k1 Q5 Cfor 遍历
& q! H4 ]5 L$ J' X8 N# f1 t保存数据 保存字符串
# |* F2 b3 n* f7 B- |! Wfor content in html_data:' N' k$ e2 g, {# Y$ Y) z! w0 {9 r
# mode 保存方式 w 写入会覆盖 a 追加写入
; E( X) B: B' T8 q9 w with open('弹幕1.txt', mode='a', encoding='utf-8') as f:. v& E! J" A% l$ c, R1 }1 D
f.write(content)
7 \% ]- R$ U( u+ b6 f5 r f.write('\n')
) x' _0 L' s! R4 F. b; h
4 ]) b. L8 I( l' A+ y
% e+ |1 F2 I& p, d, I# print(content_str)& D; e! [7 ^/ b. `4 H/ Q" I2 Y: D
1& G% _: P0 `8 ^, x( L+ O4 A
2
. _& x* @) M. j4 d# v2 ~3
/ c; U5 m1 r! d- x* L' d" n# q' S4
( [3 }$ Z! U; q" x0 `; c* J5
- [3 z. L) e9 t$ y2 ~) \5 U( F# d60 ]: J- P2 g& S4 Q+ a+ W1 R& ?
7) v1 t: i( y) s: [" Z6 a
爬取结果! L, \, O- H% z/ {; g* p
0 `" o" }7 C6 P# m, x
1 R3 Y) z0 i% s) \# f0 {& ?3 N
3 {7 G% V5 {$ U5 O
0 L; X( z% C1 d) D# t$ b然后我们再来实现制作词云图部分
7 D) i; B: G+ x* w* b2 |& n5 y' ?: }; |+ V: T, m; ?
$ n U F; W0 p# `' R9 v7 r$ b首先要安装这两个模块: N$ ]" g% E7 _3 N! d
/ ~* R* _6 O& [ m( y" ?" a
$ u# x; [9 E1 U( V
import jieba
9 T; D1 l9 y! @7 o4 N& Ximport wordcloud
% N/ r% T$ p0 O/ \1 E. t1
% O2 H8 t$ `5 Y W2
: E# g2 W6 O1 j8 q. k+ ]一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
1 S8 c8 I6 I* K. g* T
. g6 \" F* y! Q$ m( C1 L/ B+ n
1 X: T3 f4 a4 ], p" if = open('弹幕.txt', mode='r', encoding='utf-8')5 i- g& F7 a' R' J, h! r, J
text = f.read()4 W2 c2 m: T4 O; Z; r
txt_list = jieba.lcut(text)
9 k! z4 r. r, @0 N7 l9 U# print(txt_list), t! U$ \7 J" H
1
3 k; n; b1 b' T% r" W. e2
5 N% D* @6 @( y" g, H( J3
% |8 ~# K; [5 T4
% P$ u4 A# e8 d4 z" ^列表整合成一个字符串# e' d) q$ J3 L* ?5 h
* x5 }1 Y/ U0 `/ Q- s9 r) X
3 [0 B4 T- o7 Q6 a Q* x, |+ x
string = ' '.join(txt_list)7 ^/ ]/ n4 s- f4 ]* P
print(string)
& E6 p$ `0 k3 `3 B4 Q8 R6 j4 y0 P2 kprint('---'*50)8 A2 L2 Y( v7 r0 G; C& C0 Y
print(str(txt_list))
; T* l. [8 u) K: V. u+ [4 q) W* f1: Z0 T, L1 C4 z, x: K7 `
2
- U+ S5 L. j6 O# L6 b, H v3
( P# c7 ^7 ^* ]1 x4, x* M# a" @. ^; t; q I1 H* E
词云图设置9 Q; @' C0 @1 i( Y) T+ o
o0 u( q+ Y9 Z5 a: ~& U }4 e ]7 N( L, w9 U' b* h( G
wc = wordcloud.WordCloud(
1 z! g4 h8 F& X2 H3 s width=1000, # 图片的宽0 X H9 v9 P+ n, I0 y
height=700, # 图片的高7 D1 s3 D+ v* F) [/ Z/ t$ z
background_color='white', # 图片背景颜色
' U! ?) U8 g4 q9 I8 P- i, h/ I/ O font_path='msyh.ttc', # 词云字体. u- } S# m& x h/ g* U; i
# mask=py, # 所使用的词云图片
9 K* @! a6 q$ B8 e/ J/ ~ scale=15,
. W3 n- |" g4 N. u f, Y( I7 k( G* m # stopwords={words}, # 停用词
M& k8 A" d0 G3 }# U& k4 u # contour_width=5,, ]. i, d5 W, K& N
# contour_color='red' # 轮廓颜色
+ @+ M# G) z6 a7 t, V% L6 j)1 p E+ {8 {+ P0 ~1 Q
16 J; \: c6 s! L% B' [
2
0 i. m+ i2 t1 D9 Z: ]* v, `36 t# K- p; f- L& M% @
4
9 X' m- M% }+ t% A, d/ {50 K( M t3 c$ I5 z5 l/ |
6( V9 E. N O& I) a# L: P
7( }7 p9 x! c/ a" k# L" W$ G* s
8
U$ [! R# W- ?, u& T9
) ~! k9 \2 F1 O c10 @8 L& z% C6 z7 y
11/ i% t- Y8 L& z, x7 A% Z
给词云输入文字
/ L' @3 W/ f0 C0 A8 r
. n7 k- t5 y1 V% x# r" f/ ^
! h% O6 @! d% Lwc.generate(string)! V; W+ D3 g2 K. j- x* P6 c1 J
1 h ?; w3 z- t8 \
词云图保存图片地址7 y2 {1 U& l1 E. B' }) L; p5 g) w7 G
! l! f7 k4 F7 f+ P5 g% _
- X2 j- X6 `. @" e. `; W% `wc.to_file('output1.png')
% B4 Q7 k1 e; Z+ U5 p/ L5 F1
, S* \5 s7 m- J$ q词云图的过程中有点慢,大家不要心急1 K" \5 J0 ] `) D
2 a, d; m( K& D8 V6 @2 Y. Y( r+ B9 j
9 X @4 p( h* \' L) m9 x这是最后的结果
8 }# J. \# K& N# d+ x0 d3 k" p
: s2 |* \& `2 H/ F8 `& N
( m" }/ P8 R6 `& X6 B) @8 ~8 J没有加停用词,所以一些无用的词比较多
8 K O5 G. h# F& _6 r
+ x, K- t5 Z5 `$ ^8 i+ R. u( E5 E7 U; @% X
stopwords={'了', '啊'}
8 ~+ R( y0 i* y9 A; W; h0 O: `1
& f1 @' a" F3 I0 v把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
& @7 Y1 D2 F- G# l1 G2 @我们再来看下
9 G2 b$ n, k# H1 e" \' c8 d
! R9 a" r* j& _! B( X* y6 [- z" e5 t& |2 |; S5 m0 I, g; C
不知名网友:666666 牛批 老哥我要学!!!
( S( J- c) K, I8 v" G6 T3 X: M% ^0 {! T r! Y7 C } c
0 a) N# `6 s& w' }: v$ r. T4 q! U* w J: J0 L( b" ?: B& f
4 ?+ Y) [5 s( D5 w2 D+ d7 k# K
————————————————4 t: F: Z# f4 C/ ?' C8 c; E
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 B9 i) H, v# ], }6 {* {6 k
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
4 {2 S+ ?; z' N3 `' L
# `# z9 V/ o4 t. q* f! X& A& s5 u: y
8 I! n; F, ~. X! M |
zan
|