- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565695 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174931
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
3 k) O/ g* L5 j( n# Z# N用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!* \& h! p' c7 @# f: w; _3 I
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!$ K& d+ T8 _# H- ^/ }1 ~* A# j% m' V
康康大家都怎么说!
2 g. b) O, Q/ H: M3 p; }
5 J/ L2 x. p, x; h* z6 K8 }4 N5 @5 ]; n
& S9 q- i! x1 D. C9 P
. s7 U$ s% U' W% v6 m; }$ Y- o1 ] k5 ?6 Q0 ^# E6 X
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
0 `4 \: V: a2 [8 G. T9 }! t* @
# ?6 q A+ V' d7 }& [" v- U; \) [7 L: B0 `* w4 ~0 R R
如何安装模块:
2 q { {; V# S, l* B0 }2 J2 b% l, G: R6 S/ b) T6 }
K. r O6 Q v; q! q uwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车+ R. X0 W5 g u6 z
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
: m* f8 o2 P( i3 h如果模块安装失败了,可能是这些问题:
; [4 v- {3 ^2 y( a% [( t+ f! \; S9 V+ o5 S
2 W6 L# q4 q6 `! ]1 s' t提示:pip 不是内部命令
* g+ R/ m B3 Y& J# X" x你python环境变量可能没有设置好
9 c+ ]' A( w+ |) d有安装进度条显示,但是安装到一半出现报错了) L1 E! N+ `4 } D2 X* ~
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
5 y6 k- l. k$ ~- yread time out 网络连接超时 你可以切换为国内的镜像源
. w' L- m6 B& c! V明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
5 ^! J- }/ S" f! R# ?1 {你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
5 {& C$ v* X& E" [' C- L# p可能安装了多个python版本
: A2 N) X% K0 _2 e b安装一个版本即可
8 g6 L- e' W9 a; GPython做爬虫到底可以做些什么呢?
( J% D. U' W# t4 J+ d! C) ]0 ~
C3 z. a9 @% y/ A! Z5 M) q+ A, q4 q8 M
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…! h! @5 e* n7 o) A' }! X6 |
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量, |% M {( E L8 S' N; w
可以刷课 可以刷网课 自动 还能自动批量注册账号. g9 q4 W6 v6 M: v- A' O N
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
. h3 U: K, H% K普通B站视频可以爬 番剧是需要会员的
4 m0 R8 l9 k3 T. a. C+ w2 w7 B; B& s6 k) S" x: U3 R( M5 k
w6 _7 b3 Q/ m. s爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载): h# ?1 _$ N" q: Z* V
K) |, F: I0 z: \( u: x
I9 x1 D2 `! K
1. 确定目标需求 (弹幕数据 那个视频弹幕)
$ E h6 N. t% s4 h# l; Z2 \ 确定了; B. k$ b% {! G$ ?+ A9 b4 ~: [
2. 找数据 (数据的来源分析)
3 w. {1 o, E3 s( f9 ` 简简单单 找到了
+ X' ]& Z) x, g3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
" ~9 {3 c+ x E# q* r; m9 R5 D1 E 请求方式: get / post1 ?! r" [( s& W) T9 ~
请求头:
% ~0 [6 M. g+ X6 k' V% p https://api.bilibili.com/x/v1/dm/list.so?oid=376200196) W1 L3 [* c$ O
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
6 @8 G) l) h0 g/ M k* z4. 获取数据 5 ~+ q6 V0 \& F! o
文本数据 response.text 获取网页源代码
# w+ d9 G+ B( X, P3 {7 b l' q json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多! ~( e0 k% I8 t1 ? x
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 - i$ Q: F" y) Y, F x% A) ]6 j& h
5. 解析数据
5 ]8 z0 `2 D9 S+ \+ G& J 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 & Q. R4 ~) Q- L7 q
6. 保存数据
" z- ]$ e+ v. g8 a) ]- O: n1 s/ `' f' I M. M" R
2; W" b7 M, t: a4 B8 r
3
3 z* x" Q9 j1 z6 D4) k& t$ z, h9 k& e3 \& i. @* }
55 {, a9 O U! B ]
6
" F9 h1 |; ~! `+ c: y9 v5 h0 T7
2 ^" j) |0 X6 a$ q" z8, t2 R' B% L/ {2 E
9 r! l* \4 a1 q2 |# z
10+ D: ]' L* ?5 u7 t
11
% e5 s5 X5 M' w. l12; K( U4 q: o* b
13
o7 R/ S* X% `. {$ p14! y" m- i/ t/ m
15
8 c8 c: G: {4 i+ E! `16
7 N! z s9 }6 _4 x( i5 Jpython除了做爬虫数据采集,还可以做什么?
( d% `; X; E! `/ X兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包), \ a$ _1 w) S! P* ?
3 {0 {5 u9 b* U- m# d5 H \2 p& S7 R/ n8 M4 A
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K# N% m' L, r, H- _. Q
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
1 |9 o: h9 G3 U, X1 H' G: o; a我可以做到这样么?" H# `; v- T4 V0 g# S
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;8 b- D1 }$ v% i
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;6 `) b0 H4 W& a
- W' f- c" P1 n1 A8 _9 e& a1 S. F! L- L
/ k6 o- e+ b3 Z g0 X爬虫开发(脚本)(就业/外包) 可见即可爬
# H* K: t) P% U7 d9 J& e虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
0 R: D" b# G! A' f6 O9 l很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!% i# t' p" D- ^! H+ I0 g- }
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
( u9 {0 o! {1 U( ]$ q6 ]2 |9 j: }* J
) J; s/ ?0 O" m/ I8 Q k3 g数据分析(就业/外包)
( b) T* D. s2 W- u6 @. Y" p, S4 `! Q" H5 w( i
/ G0 S4 r6 j; V3 R/ I1 G自动化(脚本)
) J) w4 S l& c2 I
3 K. F! c7 d' x2 i+ r
7 y2 I4 l8 E8 P* W+ U8 k, o游戏开发/辅助(脚本)0 ?# ^2 z9 }. X& S
9 V4 w: U& g9 |) P- k, d z
5 D9 n( w9 e( X& t人工智能(研究生以上学历 要求很高)
* U" b4 r1 }- [6 z3 y& E1 |6 h) K+ T2 e* u7 y
1 _% H2 @4 N. Z+ g! C6 R- L等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
! t. F. _: R. A$ z6 L
# N7 ?% l/ F- O! T, v, {. `: P9 j9 y& x5 Y2 Q/ J, U3 J4 O
我们开始正题吧+ Y/ j3 R$ c8 o" Y
' h/ N4 n1 z# n+ }4 _2 A, [
; a' z) p8 A7 Y) X4 B6 G ?
爬虫部分:9 X9 B3 E1 Y8 C, t0 H* n( K
发送请求 第三方模块 需要pip install requests5 ^& z q' O1 z: L
6 v u' l w( ^) {0 W
. N! x" y( G, _import requests; I. z* Z; J8 G1 `, Y/ x
import re # 内置模块* f+ a& B( x9 I4 Z. G+ H* `0 E
: }' H5 l6 V% x& D1 t
: w) d% N7 c3 P* w( H3 R9 b1 N! Surl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
$ W0 F! B$ b- D( K1! U+ ~6 Q, l/ {& M4 z- l
25 \) g6 a) K$ g
32 T( Z* Y9 p3 [+ M. G; V. S
4
5 b$ {$ s; o3 a! X/ i- g请求头的作用就是伪装
% C6 ^0 [; z) _& \
" H8 _9 w: H7 D5 k5 s9 D
& G" n! V" @$ v C8 Cheaders = {, x k4 T( a" F. ^, n
'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'
: r- c; Y+ U K: @* f} j& V' i: M' a
1; i5 t8 N; a% P8 {
2$ x' o9 O& }' x; F% ?- ~+ h: `
3 v8 j, [" W; p- K8 M. x; e
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
6 o. R; _4 s" K3 t) Q- o" B6 v7 ^9 y函数传参 I7 }; r7 [( [' n, g6 H' Z
* c( g( |& t7 w0 s0 Y' B* e2 j+ q; Q- a" \# [: s
response = requests.get(url=url, headers=headers)
6 l# B7 R ^( Z% B. G* ~7 W1
! s! r' h8 G7 o+ y* |9 [6 O/ t+ ~<> 对象 对象意味着你可以调用里面的方法或者属性1 y" p7 K6 E6 u) U2 e3 z6 C
200 状态码 请求成功
9 [0 h. I- z' m/ p0 v5 I+ r获取数据 文本数据
6 g$ N& H5 u. D4 Z. w ^自动识别编码
, w0 [3 y1 o2 y- Q4 p+ M U' z. m+ }& a f/ S, Q* z2 x" d
5 ]5 C7 e6 `8 w! e
response.encoding = response.apparent_encoding/ a) Y2 ?# }6 K. c; i
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
; B C7 V& M( ?$ e1( L+ D8 \2 F T- f0 Z2 Z; z
2( U" H* |3 i( D/ p m* s
content_str = ‘\n’.join(html_data)
* ?3 [- f; z1 J# B) p% ^
% z) E* e/ Z! O) d" E3 ]5 e9 b% O* b, G- j) `/ U
要列表转成字符串 ‘’.join()
& a$ F. e; f# hfor 遍历
, L2 t' z; O, N8 s3 q* d, |保存数据 保存字符串+ |* a; v d, f, ^9 F
for content in html_data:
4 f' o7 d6 Y5 G, c8 H5 t4 H # mode 保存方式 w 写入会覆盖 a 追加写入
+ L7 }( p- {- N: q' L8 S- E with open('弹幕1.txt', mode='a', encoding='utf-8') as f:# w' `; o) D+ {+ ^
f.write(content)
" ? [. M, Q" _8 M( G f.write('\n')4 R- ^6 ]" C; R: |/ ^( z2 s1 Q
* n, d8 X% L5 F& o [8 c" h/ G
$ m) m+ q! y" D4 ]) T
# print(content_str)
9 G4 ^: r6 O; i1
, ]' l" z0 C9 z$ ~$ @2
$ [& {* f# k+ _7 B9 J/ u3' z& [1 m0 o: o7 t% }
4
, V6 v4 l( {0 y( v' z5 Q+ r4 U6 }* m5
* \# U; |# f6 ]' ]6
, X+ c& Q5 N& s7 @+ Y6 ~1 j7. \( W# l. M. S
爬取结果
" b) \4 _6 B" m
& A9 a, D6 d/ s1 Q3 N( e2 [% r7 G6 D1 B K, T0 N; \" ^0 S9 ^- P
1 q; I2 P7 Z6 f D3 h8 Y+ ~/ ?+ @0 b3 _, ^' M; F/ [' V2 C e
然后我们再来实现制作词云图部分
5 f$ M8 H5 Z) t( F9 N N
' g& J5 C9 B3 x; @" s
; I5 Z" g* h2 h. L首先要安装这两个模块% Y7 C( E v+ |. c/ }
/ R3 ^3 E( `. K+ J" [$ F! s5 d1 w% c
* n0 K! n0 ?" J/ ? o
import jieba
' x3 h7 p7 C1 C3 r* s4 Mimport wordcloud
|8 ^% H d, o7 X3 _1
$ }3 f* a5 e% V6 e1 U2
; \; m9 d1 @2 w! M, Z0 l一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。2 ?. {6 H1 T @" c; a
1 H- |2 p1 ^+ u! k. w6 j6 h/ S" _8 o
f = open('弹幕.txt', mode='r', encoding='utf-8')9 b) a% @4 r' M% y3 R, I
text = f.read()% a4 ^7 U9 Z. X" l$ _! x
txt_list = jieba.lcut(text)* v) o. {' _$ t
# print(txt_list)
P% ?& M7 L/ g7 F' L5 ?6 r: q16 C: q+ D& S) t4 P
2
9 r6 n. a, C) t3 f: W3
: }( q1 o% s r4; h; J' C- x A& z& S3 W" N, \
列表整合成一个字符串
1 n5 J t W, e
4 _4 q4 g2 [) E: f! D% h5 P* Y! p$ \3 u: b
string = ' '.join(txt_list)
! T' p7 [1 P1 _# eprint(string)
{% v" d8 b; s9 ?; r4 Gprint('---'*50)" n/ d+ X7 F) [2 V* n' `7 s
print(str(txt_list))
& c2 \$ P1 a; ?2 U; N; G1
! S, _* @; j. _( @8 \+ M2
& M. a: o* j: P3
& R! C) r5 g9 l4
9 }$ l+ D% h: G4 x1 U词云图设置
. b( I) M% u9 M- O- {! O, f9 W
7 X, B. j) I/ Q. {6 V* F
5 @9 Y6 ?: d5 ]3 vwc = wordcloud.WordCloud(
1 r/ I2 _# g& U2 d9 X width=1000, # 图片的宽$ v* `4 O& H6 |7 c7 _/ v% P
height=700, # 图片的高
5 z1 e ]/ m( z9 V background_color='white', # 图片背景颜色6 r! R, ]) T1 K1 I2 H0 ~* n
font_path='msyh.ttc', # 词云字体
; G- y$ C9 b4 Z6 ` # mask=py, # 所使用的词云图片
* t) z g, _: z1 l6 @' O scale=15,+ H$ x, b9 U- v. @# _ o @! ~) E
# stopwords={words}, # 停用词
) E' x: f3 |9 u3 P2 a6 }+ L # contour_width=5,4 h" e: F0 s) O; [
# contour_color='red' # 轮廓颜色
, r' R+ f% V e5 V- Y( I( Y, g)
0 o$ q3 g, {- Y/ E+ \1
" B7 s# s* [4 k3 g8 I2! O: s) {4 n9 }+ R
3
+ c* x( s- ~, o. D4
2 I( s a6 T ^+ |5
/ L/ p; Y) g# A0 W6) a. L7 W8 E" _: Q4 z" d
7
/ i" c$ e) @: S1 z' f9 \8
7 \" B% C7 }: J9
' T% N7 d( `$ v0 ^& x @10% x0 E/ v" T. n5 P# v! d% ^- F, @6 X) D
11/ i0 l9 l2 ?* ~3 b+ G0 v
给词云输入文字$ \0 r: H- B3 S
0 w4 [1 k/ j; h- s1 ^" V ~: s
- M: S( S4 U: ]. B1 P2 ~wc.generate(string). z% B5 `3 |/ q1 ^& g1 G' x$ S
1' X) k" V& b& T1 Y
词云图保存图片地址! W( Q# @' ]) g/ T
; e) U ^* b% U( o$ V& p; _: O/ c5 V
wc.to_file('output1.png')
" N, a2 P! p0 V9 ], g4 [1- }5 i6 z1 Y. W' p
词云图的过程中有点慢,大家不要心急
/ k( c$ o6 n( g5 t# w
6 N6 _$ a1 r5 I
5 |4 z/ n, A' ?5 i这是最后的结果
% d4 K, b1 b$ h C7 J, n0 G5 T/ k1 f8 \; p0 ?: p
7 Q$ e( T& v+ s% y1 k+ |
没有加停用词,所以一些无用的词比较多# B) Q# e* P3 V" f: t' g
3 G( `) o* K& f
" t; x# P: f- n8 ]stopwords={'了', '啊'}) [! o X# n: `! V* n/ f
19 _0 T( p% X7 B- c9 D) T
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。. k% A2 c0 Z, G9 `% \$ t+ u
我们再来看下0 u) Q. P& T% ]+ r
! z, [7 a8 [8 n9 B* N0 N# h' u8 `0 {8 d+ P
不知名网友:666666 牛批 老哥我要学!!!
0 I$ D! E8 D* J, M4 t M* r: B- Y. m
, R4 M( K' X8 | G4 g7 { r7 @! j; k) v
% C% |. `2 ~, _. Q7 R7 f" u: H9 S O
9 O& x% U4 d" s————————————————
" Q3 J3 H6 T: G. j/ Z6 a1 T版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; V& w* `' I% F原文链接:https://blog.csdn.net/ooowwq/article/details/1192119078 ]+ G( c/ I8 l0 N; M) Y5 N+ w! `. H
9 \. ^/ H; D+ S# W5 e! ]. m
& J4 M# _1 }/ u( O: ?6 l# [ |
zan
|