- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563395 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174241
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
( n* M p3 {" i7 ]: @, s6 d5 `
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
/ w) i' Z! q a4 r今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!3 y0 t2 v7 a6 h, T) j6 J, t
康康大家都怎么说!
/ l9 b8 X. H+ ?- h5 J5 e
4 A S/ f% m( A7 D$ U8 T8 a8 E8 ?, y
- ?/ I, A i; \% n- L
1 b- C) ~) {; p6 i, @开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。5 U# q) J" W. H: }0 l9 E. c! I
/ i& q2 Y* f9 D6 g2 {
! c% `$ R9 H) T* O% \& ]0 Z/ c
如何安装模块:
' J" X4 V7 m0 S' v0 Z. T7 Y9 B( D& `& ^) X7 V; s C
& D* y. C5 J) L8 A _* z% O$ M. ?2 w
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
& t" [7 ]! y8 Y+ Z6 @pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
. [" F$ N4 \1 v% ~. l, \( u$ S如果模块安装失败了,可能是这些问题:2 L( p1 q' _% X
5 |1 l: {& m& Q" u& N# n
) q7 w: ?4 S% Q: z" P# z
提示:pip 不是内部命令- o2 j/ b" V0 L: z3 j' T
你python环境变量可能没有设置好; s* b( j' h1 l
有安装进度条显示,但是安装到一半出现报错了
0 w5 B7 Q8 D% i) ~8 o因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
! ]( n" M1 m5 Pread time out 网络连接超时 你可以切换为国内的镜像源! T" E$ S+ ^- A; ?3 X0 l
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块0 y* {& B1 e$ t
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下/ g6 r' z! j5 S6 d: b' Z
可能安装了多个python版本. g6 N1 {- c3 n$ Y" K
安装一个版本即可6 V* D! |- w% F
Python做爬虫到底可以做些什么呢?
% Q) W8 k6 H7 v0 H
4 t1 d4 j; p3 G) X i; z! ?
$ E. G) @/ K8 l+ x: R常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…0 T# {9 K. ^" f2 t
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
6 h8 F5 |6 L2 r7 S1 U2 e6 B0 h可以刷课 可以刷网课 自动 还能自动批量注册账号: a8 K) f" H( m4 b2 r8 x
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …( I7 q; ?# I( j. @9 F! R
普通B站视频可以爬 番剧是需要会员的
. t2 P3 B! B5 ]4 X# k4 |6 T* D( a' [: K7 z7 ~" V
5 B# K$ k$ h) W! g7 b爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
+ F; `- C7 ~' X/ }* G, E% e1 q; h- K7 d4 ~( ^) S4 q/ F
9 g& }4 K3 v5 y& U( N7 U( @+ F1. 确定目标需求 (弹幕数据 那个视频弹幕)
/ t, o2 Y. y% E* z+ ?- Y+ [ 确定了( e( z1 ^% ^) n) [
2. 找数据 (数据的来源分析)
) |$ M: m7 {+ l9 a 简简单单 找到了: d1 d7 {$ G# n; J* x4 T. o& P5 o
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
* |! E- O0 W( s6 j 请求方式: get / post
0 Q7 }; E& Y" h 请求头: 0 `2 {2 j; a+ R
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
+ V4 Q. v4 h0 b S (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)0 a% F3 n1 j0 f ?: g* g
4. 获取数据
1 t1 B- r0 e1 K1 Y/ y! J 文本数据 response.text 获取网页源代码8 `) R* ]6 s: `1 g
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多- A, T5 S( ]5 P4 {$ A1 {
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
* O+ {, K; o$ f0 \6 y5. 解析数据
& i$ K! _, C% S, n2 K5 i 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 w9 ?% @; H4 E
6. 保存数据
" e7 l: j0 }' z4 c1 Q' s: x- z6 R0 _$ L
2* m: y6 z d# R7 q7 L; X5 y& i; z. K
3
$ p4 h$ F Z7 H/ C& U* _/ G( L4
. i1 G, v! P* c; ?/ ^2 N5
3 T Q: |3 G. ]" m- B S/ X5 b) J6; Y% E' [0 L2 y0 [
7
/ x5 w& \, M1 j, e81 h+ E6 {2 m2 G: ]% L `, t
9+ |/ ]! Y% R; v# A1 e1 g
103 c' K5 w' C" x9 W4 ?9 c
11
0 O5 v7 ^7 u; k* N$ K p+ l12
" H6 `% v5 s# I# e13- }# q, x( T2 D0 P: n+ j
146 M" M6 ?: h7 _5 e
15
8 s D H9 \, {" |& l8 W% D165 m: i/ W7 g$ S4 m' {1 D( M
python除了做爬虫数据采集,还可以做什么?5 n* F, L* B% F4 z0 o! D1 \
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)- [* A5 \; D/ F3 k" p8 a) x
+ L2 |6 D3 D* q5 v
- O0 I, `' ^( e网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K# A! O2 f+ d3 G9 w0 R2 c/ e* b
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
# E/ S9 e( s9 ]* h3 c8 ?* g; K我可以做到这样么?
: |" p3 @1 n2 I; X5 d; O0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;. r& Y" Q% }7 c+ q- k7 j
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
4 m- t# w: {6 C% V' p2 ?" [1 A9 a+ A6 @0 f3 ^
) S8 E+ T: n2 o" Q9 R( j
爬虫开发(脚本)(就业/外包) 可见即可爬
( `9 T, O! y" [2 V虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
! D ?) K& U$ I1 f2 M3 g. B很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
3 z# R& G* E6 C2 G7 _之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
0 _. i/ c# K7 ^9 H" T
6 q% m$ D8 ~, N: ?6 q4 o4 Z9 C! i1 e, X2 N
数据分析(就业/外包)3 k7 W2 M; G( |1 |
/ m0 J# J2 ?3 M3 Q
7 V9 `; Z' f. F9 k( H自动化(脚本). ^! f( T3 f/ e9 V2 _) \
3 q+ I! j. v* s" f
* C) ]1 u5 B# j2 G" x' ]) I0 {) e游戏开发/辅助(脚本)+ c+ q. j* G3 o& N" @2 R7 J
9 x; f! o* E5 z
- C3 ~6 b2 z; i0 \人工智能(研究生以上学历 要求很高)
' q) v& |9 p* P- p, Z7 T
: c2 Y9 T* F' |5 p
! [: j( O& z) H3 i: ^& |& q等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。- q# \5 G X2 }$ R& n! L T) h C4 |
6 e1 {1 d+ |) e3 J' R4 @- ~9 q0 z& i9 e G
8 D5 \; f; @8 L# i
我们开始正题吧
+ F1 F, N9 W! a+ S4 _9 G9 R, y: ~$ o9 b5 t0 M
|$ }! s$ ] c& S" F, L
爬虫部分:
+ @+ z) K- e: E9 I1 s发送请求 第三方模块 需要pip install requests
( W) i$ r/ K" G: \) b w
* q' \/ {' q/ V4 E+ H
$ l: u% g e5 W7 Q. y) wimport requests
# J$ ]" r3 _5 j( w) Wimport re # 内置模块; a0 Q! ]/ b% U3 i' ?6 J
' C4 `6 _/ x5 t4 u" ^
. q. P+ x- E; a9 @# iurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'" ~4 L z8 Q+ \, p- h
1$ h2 B) P6 w/ f& _+ }
2: k. f* O: U. x
30 w0 A4 s3 L7 Z" d' o4 U
4
! Q# c+ h9 I+ I请求头的作用就是伪装
5 H4 t- w+ K/ p% f5 Z6 p1 v6 c- a" q' ^3 Y
1 n5 p* A7 [+ D3 H a. c0 B
headers = {0 d; F& ~8 S1 H' k
'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'2 y& l- k. B& ?+ T4 w V3 J+ e
}" E7 N: {: o* ]
1% X1 X$ h9 E3 e4 F9 h+ ^, Z1 U: O
2
$ d; @4 i( ]2 k1 h3
& B# Y# A; S1 e: x/ E模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
& |* q8 e7 r ^函数传参+ J8 L! G/ g' t
& ^# i: H3 m8 d2 d% j/ b
2 n; ]2 ` {/ I! ^" ^( Hresponse = requests.get(url=url, headers=headers)0 l- Y6 d8 H" Q, r/ Y
1
& t7 }4 T4 g# i- O' w$ m<> 对象 对象意味着你可以调用里面的方法或者属性
! g' L; b/ P% ?" L3 I9 U$ U200 状态码 请求成功. O O6 }0 ^9 {
获取数据 文本数据' t" b# k) Y2 _4 e! P' s
自动识别编码
3 K" Q& R% A' {. r' T; n1 y: c$ G% I; E7 z# b0 I
1 [ Y7 p; Z0 q# e$ ?5 w3 ]
response.encoding = response.apparent_encoding% U; |' }- o! `1 o9 O& I7 J
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)( I+ _3 ]% \$ `* p3 N
1- b- s2 o% `0 O; p, g) B5 w% O
2& L4 u) s6 Z$ H M
content_str = ‘\n’.join(html_data)
3 E. Q. o1 q' L+ Y+ L$ ~0 j2 @
, K# t& I. X' O/ ]7 w8 L4 A* N. x: c3 Z" O, X
要列表转成字符串 ‘’.join()
/ J5 `4 L- {& ?/ B: H: |for 遍历: v9 R7 Y( ]: D( q4 h+ t
保存数据 保存字符串
+ x6 H$ H; X: B! R' Zfor content in html_data:+ E- ?/ j/ u# T/ G" {
# mode 保存方式 w 写入会覆盖 a 追加写入
$ _) \5 R' y8 f8 ~ with open('弹幕1.txt', mode='a', encoding='utf-8') as f:% z& }' U# |/ C2 X7 W
f.write(content)
: U+ \9 s0 o! p+ Y3 y1 N f.write('\n')( g! K) m0 @0 a* z# W& s: N4 z. M
8 a9 Y& _" ]/ j5 }8 k0 [6 i% z/ }7 t& ]( |
# print(content_str)
. C5 Z' f1 L9 a4 R6 q" H1
2 n, t: s9 L5 f2
1 ~4 [6 F' y5 I+ f3
" q: i6 p& a- T. j, \44 { \9 t, r1 M, Q7 h" ~- p, r
5
+ |1 U9 s2 h# a5 a& e$ v, I& i6
; C5 O, V& D7 W& u8 l% p$ k7
( X9 J) I0 G/ `爬取结果' g- {2 a2 S- Y2 C1 \
. Y1 i4 w% h/ l% L2 A9 {1 l5 R) |$ t) n" L1 w1 O
/ n) U0 a& { D* |& Z& p# T
+ r2 S: x1 a7 d. f
然后我们再来实现制作词云图部分2 m5 |8 A3 L& u' S6 p v, ^
# x- r5 F" y/ b* ~/ T; j1 J& G' t$ J- f' M' M
首先要安装这两个模块
' e! a- F1 s: h% t- H8 J! ?
' z9 R n+ K# c _- Q, `; u1 D# M' k. ?- U1 z" f0 x3 h
import jieba- i' x% e! L$ t- u$ y
import wordcloud% w8 o# X! m1 E7 W) l0 g
1
9 F8 L& |/ s) u+ P8 k7 S1 @3 N2
7 a+ A9 p7 y: A# u$ p, P一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。. y4 [/ L* z2 E) k W. w
. V* f$ V" X6 O1 @+ v/ m, D- m2 B3 A4 C, H+ X: H9 d
f = open('弹幕.txt', mode='r', encoding='utf-8'): l9 j% W; q7 q" U3 v. U
text = f.read()( z7 V3 U9 q8 V5 ]
txt_list = jieba.lcut(text)
1 C; ^+ `; a5 U) }* H7 l: o7 j# print(txt_list), u( |8 P8 ]& V0 @3 W5 a: x0 K9 O6 r6 M
1" x/ M( q2 p S9 i- C+ _
26 u2 k5 ~! H; F4 v: R
3! b0 U: r- ^8 ~
4+ b! a" N- C# h; o+ u: l
列表整合成一个字符串1 I6 [& ?8 X2 z8 w- c3 M; [# w
|+ y8 e# I5 n, T
/ d. D, f1 ?1 _" L8 nstring = ' '.join(txt_list)
5 B' j2 N. {. `; [9 u' K* Y5 \0 Sprint(string)
i- v ~$ Y& Wprint('---'*50)
( V( w2 C2 h1 Jprint(str(txt_list))
8 b6 g3 H8 O9 \+ E: S& h/ F1: R" G% h: K) g
2
' i4 S$ ]5 G3 z! t3
7 k( ]9 {3 p) I0 x$ L0 b: ~4
0 @/ F) Y6 \" K' b- m词云图设置$ R- }' i$ c) k6 |# ^
$ F7 X- @. n( i. T
% }; l$ K7 S9 k7 Jwc = wordcloud.WordCloud(
( \) D1 ~. W9 j% v- K2 Q2 } width=1000, # 图片的宽
- h5 n- z3 H2 Z# y6 x% X: ?/ w height=700, # 图片的高" p+ n& e `- t6 H0 u
background_color='white', # 图片背景颜色
/ I) |6 r/ f4 H1 Q- `" @) I& A2 | font_path='msyh.ttc', # 词云字体
+ u* y" H) M1 h. x # mask=py, # 所使用的词云图片6 j$ q) q/ {- N& q
scale=15,; y) W6 P6 K6 [- m0 g
# stopwords={words}, # 停用词
, J0 [" Z1 O- L) N5 D. h; D # contour_width=5,# X4 e3 U2 B8 l& J3 Z
# contour_color='red' # 轮廓颜色
8 ]7 o m; x; O+ `% d)- T7 ^5 G, O/ @0 L( G8 b
1' U4 G# G& k' C* g, k1 o
2+ P( {" k, f2 N& \8 c- E( q
3& F) |# m( S# K
4
: S- n& f) w; w: E0 Z( N53 U) A" v0 `" P/ t3 D' Q
6) I, F. A" H. E: \
74 a6 ]6 D* V* `; O
8& ~! ]' L3 z: }! x
9, i& b' _) }; K1 J v. \; c
10
( n0 R4 C$ `) V& J( {4 c$ @" p; X11" u$ N6 C8 f6 c- V
给词云输入文字+ o6 H) I9 z& u' g3 X& {* O6 \- {+ Z
# g( \% P% g; a, I/ _; Q! x2 y) A' q, X. v5 ]7 W
wc.generate(string)
2 Y F2 \. b: [. r1, H3 q# O2 {1 j2 j5 Q
词云图保存图片地址
5 T6 ~, K: K i
5 h3 M6 J6 x% A0 s( O$ B6 l3 C: q7 i6 `! e2 r( e7 X* p
wc.to_file('output1.png')
: Q5 p. L+ G+ T1
! s0 F' k" W) d1 e词云图的过程中有点慢,大家不要心急( R+ z) `. V9 r5 {4 t5 `
8 r, F. N; x/ g) F1 B0 ]
) H0 y- V% L) i0 C# R
这是最后的结果2 l" G+ ?' T( W- `3 S" e' u1 Y& c
K; E$ ]/ \* D+ Y( `) B8 p" H" h1 h2 |0 A0 S! e& N
没有加停用词,所以一些无用的词比较多" O1 q; Y: u2 k+ |
3 `. _+ q& ]( M: u j" L
3 x5 m e7 v) h ~" cstopwords={'了', '啊'}: d9 U$ w1 A3 A+ u/ t* [; W: r1 C
19 v! ~8 `1 f7 q( |' h, o2 r" Z: L
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
7 C' Y! y5 I8 u6 B5 V我们再来看下
0 O N) Z* W7 K" d2 s) A- v5 [, \
" @: a3 {! N+ r* X4 y! x9 |1 x
. l# s1 v4 L' I不知名网友:666666 牛批 老哥我要学!!!
6 t6 i# L. E2 k3 V* y& n X& M: a4 L3 I7 k. H5 F
6 K* r0 `( ]& [( W8 y
0 d. d6 K# I( A8 L8 z
, d5 y% u- a) r. ?7 j+ f% d————————————————
3 P' l6 O1 ]. s6 |- L3 ^版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; Z' O! v) W. r1 `; _7 O3 k
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907+ L) n' m* D2 P! W+ M( h9 N
! x* ^0 [: s4 S
! n1 \+ `, Y, q- ~0 E |
zan
|