- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 568668 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175823
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
. o) Z* ^& |/ I+ c2 B D$ f用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!# h: w+ ]# k' Y) \$ }5 K" B
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!, b2 ^ B4 p* q) [/ ?" g4 Y- ?
康康大家都怎么说!
2 S }* d v; h9 f- p0 i, R2 B6 n$ x8 C. \' W
( z! ^4 r; [! N% H0 U3 B
$ ~" t1 Q" K/ P+ A% j, j0 Q# k& a* V& ?3 C! y _3 N) J
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。, j, q2 W Y i. {, W" ^5 j
. @) J- q6 K- g/ D2 P& R, U& w( n: P. x7 h L; z4 a
如何安装模块:
6 E. Z' ^+ T4 U) I, l( f' D% X
6 Q) l* j. |. v2 z( h, R, Y" t/ t3 g( ^# Q P5 F
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
2 L) R) p' e) @+ M" |, |: P) upycharm里面安装 terminal 输入安装命令: pip install 模块名 回车; g. f$ \) z* m
如果模块安装失败了,可能是这些问题:
* W& H4 n: s( u. u0 G- Z
9 z7 \2 H: s: p3 {6 i' u! a9 s/ w t2 f
提示:pip 不是内部命令 b4 }5 E0 O1 Z- S; m
你python环境变量可能没有设置好
6 I% F2 {1 r& K" t: m有安装进度条显示,但是安装到一半出现报错了
9 }* H9 m6 }8 [5 r& ^因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB, B. z2 [2 O* H0 x) N5 U, q$ B
read time out 网络连接超时 你可以切换为国内的镜像源9 m6 O% N9 x6 [& Y( \
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
8 i" @; X6 |6 n9 k" @$ e你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
- g4 \2 H( n6 K( P! R% |可能安装了多个python版本
- z+ ?( m5 s8 p* A2 q5 T }6 F安装一个版本即可
7 D. n0 ^- Z9 {- P# LPython做爬虫到底可以做些什么呢?5 x6 c( W" l0 f6 u& \
( Z( q* c! h( @- X) X+ F% t) F6 Q- T, e, Z+ o$ ^: [
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
) U R% v- x- x12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量' Z; z- f9 y# H
可以刷课 可以刷网课 自动 还能自动批量注册账号
( @" {# S W2 ]4 p& D" T模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …: b, r" [% b5 r) Q1 c: Z0 M
普通B站视频可以爬 番剧是需要会员的
/ c5 V; Z, I2 t: p6 n1 B& d. q! l
8 @# |/ U# _6 m, J# }% T1 h
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)' o; q8 M# z* e- j( ^
. h4 e3 I7 Y1 \$ E2 q% g/ d$ N7 N, ]" A# X- H, b
1. 确定目标需求 (弹幕数据 那个视频弹幕)
. J' h4 E% e5 F+ } 确定了
+ q9 q% G) i2 x, H2. 找数据 (数据的来源分析)6 t- \+ w$ }+ ^- }' l
简简单单 找到了
7 p7 M1 _4 W5 k. q$ O& D- c: X3 y5 k3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
6 {% o: }& i7 r# }2 h 请求方式: get / post6 m+ d' m$ `. H) I ]5 E/ X2 }
请求头:
; w, _# y4 H q/ ]! [# d0 w https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
$ L, ?7 t9 d, Y x2 S- C; `3 e+ S (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
/ ?" [* f7 u3 O( Y" q3 I# u' o4 n* O4. 获取数据 , z/ L- Q( z% Y! w, z p
文本数据 response.text 获取网页源代码
* o" T$ E- W, h% e9 Z json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
) C3 X/ ^* T( Y" O4 P0 y/ o$ a' V- D 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 ( g4 l2 a6 O& |4 ~& h0 x4 S
5. 解析数据
6 s# `4 W7 |- y2 T3 T" [8 e+ r7 r 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 2 j3 V/ T4 X: S+ z
6. 保存数据) p! w) I1 H: `, L! \$ p
16 ]; y0 ~) ~ C- }- q; Y2 w( Z# }- Y
2
4 u9 l# }" X; L4 E, X36 h1 B6 O" a) f( D& l
4
7 _* e% K r0 e# `1 { x0 v9 A! _& T5
( h; b" Y( L# ?2 o# a. q2 @& @; ~6
# Y& v% S2 B0 [ L( G- T+ N9 j. E7
/ X ]! o2 g( ]# ^/ s8. ~8 R) @$ n4 o
9
/ Q0 S7 s/ j0 Z' [& n4 }10
0 ^4 Z: I3 p G' Y# Q, F11: G* n4 \6 n! P3 q9 T
120 i7 K& X3 Q4 L4 Q6 D) T% o
13, H' Q; O3 o7 s( s0 _* L& g
14# G: q/ u/ L5 P: ]6 y6 h; N8 @, s
159 N# b2 P2 Y) n$ F0 ]
16! a: b g& U6 m9 ?- ~6 ^
python除了做爬虫数据采集,还可以做什么? u/ r5 p. L. q
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
6 _+ X* M+ k% N7 [' e
; ?0 b C7 a n; N4 ~ u' Q6 r0 |) e$ ~: [+ o0 k: T' q0 U
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
# E% z7 d7 u4 J9 V( Q比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;/ S+ v: l- s: T
我可以做到这样么?
h' e0 |; k8 L( e- p" }9 t' c$ j3 M0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
: o+ \. F; H* ^/ M e如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
4 X4 _! M" t1 Q9 U
; V9 h; F! S4 y; N; g! E; h$ V( I- e9 i. s4 d! ~9 v
爬虫开发(脚本)(就业/外包) 可见即可爬
! V' v/ `! a1 O- D+ [3 k虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
( F' w9 M! N+ |4 q很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
7 |5 d. ?" ^8 L$ Z) b3 N$ ~; m2 ^之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
, h; m' t8 [ p& D( y4 b4 p: n B1 D& W3 ~
. l" L( L8 o8 G1 w3 W g. a5 w数据分析(就业/外包)5 S; z4 h, U8 X/ e- N4 O( j; D4 T
! R" {( i' L( _& b
$ _' \# G4 p) |, H7 l
自动化(脚本)$ }8 f* H4 l m% D5 O
' ? Z" |0 F: L* x; {% k2 j# z- ^! w1 a6 {
游戏开发/辅助(脚本)
# p: k( Q* V6 k9 o
+ g1 u5 V9 [2 k
. e& b. c) G. H人工智能(研究生以上学历 要求很高)
8 M, C5 J) }5 _, y- H( E7 w* B0 `% v& R
4 O. D+ }2 C B w! }0 g3 \
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
: q6 u6 |. t# v% w7 |4 {5 M6 a+ F, h; e% N3 W( |2 J* v# x7 ~; b, L W
+ J0 o. K2 o3 d3 K$ \* [
我们开始正题吧" M: r! K8 u! [2 R- S
! u1 C) k4 Z5 J+ B3 d, j7 N5 P
) k( m" V/ S8 v爬虫部分:
# o% ?! [/ z" b5 A发送请求 第三方模块 需要pip install requests) U2 }( y' Z7 D1 M$ L3 O& T1 p
9 w0 w- g9 {; v/ v% q9 C/ _! s3 ~8 o
8 p5 \7 Y. v: j' e `" Eimport requests7 ^% q1 I" R: q! V
import re # 内置模块& P) S2 `9 q1 Z; A0 T0 M9 H7 h( m
& w8 j6 [9 p( w; j8 r% j& r
) @- T" ]/ p2 R0 Q z6 w/ p
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
+ P& {. b- J) H" j/ w" ]8 j19 p" H4 v2 L- G5 N5 d
2
! Y5 \0 q! u; \. `- E3
/ G# M4 G; f, M+ a$ c4
) O; d2 J0 F) p$ }% C请求头的作用就是伪装9 v( h- e9 W5 t& M+ `/ l. S
8 n0 S, ~& v9 ]0 m) N+ a
8 l. q7 T/ R! F) S1 ^headers = {
( T' i; U# G9 B- ^6 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'
+ Z0 d0 ^/ x6 N, ~. k! G- m* W}" ?9 A0 L4 H- n( |) E3 f7 v
1) ]; }5 Z @0 r$ P
2$ @1 v8 y0 K- o6 w
3( j$ `0 ^, N! e5 I$ Y# B% r
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
" S# `8 {3 f. {! H. M B函数传参
' n9 h1 u: a- s8 u {' r
]+ O; W8 q1 P+ ^ j" c, y
7 O! `; f1 g7 u" Dresponse = requests.get(url=url, headers=headers)- R6 W7 H: _7 [# s
1+ W) \5 q+ R2 o: l5 a$ [: T
<> 对象 对象意味着你可以调用里面的方法或者属性6 V! S8 k; ~" S
200 状态码 请求成功: K9 N- f J7 _9 Q6 s
获取数据 文本数据
* g& L' Q1 X+ K, L4 _) G8 `自动识别编码
+ y' K$ Z( q) Z f& T. Z: t
& g4 J0 Y, j0 {" M8 t0 g$ P- s \/ X
3 |0 C) C# T+ Rresponse.encoding = response.apparent_encoding2 f+ o' D! _9 @) Q8 I' _% W9 x
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)& T( Q0 C1 q: Z8 H; i" I4 u
19 {: e2 G- q2 V
2
, H8 v0 d2 k; F3 X. t# p% _content_str = ‘\n’.join(html_data)6 b; o/ U5 r* q* v$ e+ I) W
$ r6 g$ I, O/ k& y2 T
9 k. j8 v, o$ V) E
要列表转成字符串 ‘’.join(); O" i4 @% M& k" u- J! }5 |8 v
for 遍历
9 b4 _& o6 }( v0 A3 D保存数据 保存字符串
|. L, J$ K1 K/ z4 dfor content in html_data:# x5 d0 A$ u6 e0 h$ s
# mode 保存方式 w 写入会覆盖 a 追加写入
' y& |+ w0 {. t r, A9 R! }9 _) a with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
: K* J- L, u, j6 c f.write(content)
# J+ |6 f3 D/ y1 Y, p# i/ S f.write('\n')
8 N7 R3 K% } o- H' Q# }' O. }* j/ @0 s6 r3 B
& e- f) L% B6 X/ ^* O% {0 ]
# print(content_str)
, {. M6 M% _( G) D& s+ f1" N2 t& e+ y: D
29 h+ v& V3 @/ W
3
m+ c# _8 X) f4 `, R8 ?( c4
1 Y: q9 i5 U5 U/ i59 H5 W2 x1 u8 C* R9 {
6
1 \$ i6 u7 X# |5 w4 d8 D, w1 Z7
* z o( [- ]( r% |6 J爬取结果0 L- F! ?" w8 _/ p, e' X
- b% Q$ ~! e. q* O9 O2 Y
, O7 H9 y8 i* s: M. l! i5 N5 A, A, {
, w) q: ~" j3 \# m+ m
然后我们再来实现制作词云图部分' t: r: q- w4 e' t& D7 e0 w
2 ?- ^2 U7 @ ?; q, `- E
8 B/ |- y0 m, l3 o/ G! P首先要安装这两个模块
# }9 w# z3 W0 k7 i0 \$ A/ W2 v3 M) A! y) h, x
( l" X8 ?: y6 }4 R' F0 k
import jieba
: ~3 R& d$ o4 z, E7 L% {9 D8 n1 M+ |import wordcloud
/ }! K: @8 ~& l% O3 i1
) V6 y: g F/ }8 A. P! A# q- p2" M- `' [) q- j" @
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
; B, v% P. s5 \& T9 k' f
1 b( A: S8 ^, G, [
: C. T/ x* L; I( O7 vf = open('弹幕.txt', mode='r', encoding='utf-8')! U! g: P f# K2 l2 E1 U5 g4 e3 ~
text = f.read()
1 |% S! I4 u: Z) M- i: a! etxt_list = jieba.lcut(text)
! F' b% i7 ~. X9 u1 o# print(txt_list)
* o; O! s" @+ d; {2 ?& e/ b3 ~1
* l/ r* ]* B# d28 U- @4 x! |) e- V
3- b, h" j$ f: L( z. l9 u
4
" v2 s/ q3 ]0 l) C% d列表整合成一个字符串' `/ _- y8 D' i* }% K* ^
% a! K+ G7 y# |1 e$ c+ M& d
% M* {$ |4 V) _string = ' '.join(txt_list)( f' g+ q3 L% r. H5 v8 }9 E
print(string)
7 I8 F1 g( x1 q. c3 J5 C0 {print('---'*50)* c) n6 A+ D- J/ [7 a# o n6 [2 W
print(str(txt_list))& Y( p7 p, y: x4 S; @4 u0 }
1
/ v) ~0 j8 Y, T* G3 Q' y) W/ i2/ v+ M: E% n S; _5 E7 W% b. h
3
6 Y/ ?2 M+ D. X4
4 ]# `; O2 v$ R" W2 J9 D词云图设置
* }0 R9 f& R; g+ T! [9 A0 L* \$ O7 E2 E+ K$ U
$ V: l$ y( D( ^
wc = wordcloud.WordCloud(5 r& P& N! c8 Y/ X
width=1000, # 图片的宽 ^7 m4 ]* f: y- w5 r
height=700, # 图片的高# f' G! a5 F" W! E/ @
background_color='white', # 图片背景颜色! i e' d Z' z
font_path='msyh.ttc', # 词云字体; k4 c2 r' R1 O9 I+ n h, Z
# mask=py, # 所使用的词云图片
; }& y- l- J2 o6 n2 V1 e scale=15,6 |0 A5 L+ P8 O# S2 ]
# stopwords={words}, # 停用词) `& n7 `0 e; q2 |+ b6 n
# contour_width=5,
% s0 E" F+ d- K. ~8 N # contour_color='red' # 轮廓颜色
7 q0 C( D4 v1 @; v0 I. L* B+ g)3 l0 p" X) @2 k, Q$ N
1
% p3 f5 _9 D) J9 F" X' p2) ^% h' n& F# l1 |
3
0 I! |" `* k w5 c" a* l+ `' E4# `3 t3 E+ i4 }
5
; `$ s' k. v4 ?6
* D$ m4 j1 ^: D2 x2 Z7+ a" ^% D) @; A
8
4 o4 u, r! g- E3 G3 z" @96 J$ T: L4 E) a
10: A) q8 f8 L/ x) B" A. N4 U7 |
11: |/ y. f5 ^( A5 F& }0 J" H6 V+ p
给词云输入文字" v& q8 ~, k9 X. p" V
+ t3 l: x p2 d- U) V4 N
7 d' n9 k1 H( ^2 p8 m( p+ vwc.generate(string)
, F& S s& P2 ^, n# }19 v) \% N! r9 X3 L7 W
词云图保存图片地址
9 b& ]( ~' x; a+ \1 r* ]. }3 ^& ~& J5 X3 O+ J7 a/ I" a7 o
4 [5 B: H6 {1 wwc.to_file('output1.png')
2 Y: x2 A3 W6 X }1
0 X2 Q5 s) N6 g, p+ a* }词云图的过程中有点慢,大家不要心急' A( D% `' U3 X
2 E+ q: |2 g0 Z' t) w5 W5 u9 [( C, C+ }8 T/ _
这是最后的结果! w! V. e7 n: c0 z# v
+ T0 d7 ~+ S' F3 b$ V, p6 h) w% l4 g) H2 T0 q& _
没有加停用词,所以一些无用的词比较多) `% c) O N$ P6 y3 Z/ J6 o
# `! u$ W3 \/ `; f: w7 g7 e$ f0 B1 B
) P& N& Q7 [* S: F4 k# N) cstopwords={'了', '啊'}
' Q: `% i9 `5 v6 z1
* ?: N+ @+ }- H/ _# Z$ F: ]3 G) t把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
% @1 Z$ J2 d1 ^ }& `6 L$ ]我们再来看下0 N, T- F( X3 [8 W4 R+ r2 Q
( _) w" N1 C% ?1 S8 z- Y& o" M
' s8 U- t! v1 |/ E& g% _# l9 C% m不知名网友:666666 牛批 老哥我要学!!!
/ W( s- l8 M. B8 v$ [9 v2 {4 Z
( u( j5 ~; b0 n; P+ B! b9 ~' J: W5 |/ u& w) p% @: R: Y
8 U# `7 O9 M# E" h
]8 W: t/ }3 G( n7 S( y————————————————2 q4 P. ]6 m5 K* R
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
. v* |8 R6 M4 z% O: h* E原文链接:https://blog.csdn.net/ooowwq/article/details/1192119076 {0 ]6 {3 e, I! z/ p8 M+ m y- M
8 D) ?, Q: d4 X+ t9 H; j6 S! H- o( j( d5 F1 L, D
|
zan
|