- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558923 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173050
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 p$ n3 u, \9 b* d
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
9 [: L# d' Q; n0 F今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
- T6 m- ?. I9 B, C- f( H. N; F康康大家都怎么说!1 D! l, S; r4 d7 ^2 {. J
: T3 ?. A& W) Z) k
5 q- I! J& c* J# r4 T9 C$ S
8 P' u) q2 G3 ~
1 G9 X# I5 }" ^% j0 J! {! a) v开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。0 [) Q) V4 e4 |' O/ n! j
$ ^* e. K* `; e) w
" _' M. c' T( U' L如何安装模块:
2 J& }- Z; I# j6 J; K! {0 K. C4 k% I0 a( F: w; o
: O) Q) i& k8 J5 K7 h
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车, F) e4 A9 K+ O4 ?! S Y
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车6 e" I1 |6 F) \; d; i r* c
如果模块安装失败了,可能是这些问题:9 N! y6 f! s' u0 P) W1 \
0 A# F+ w9 p1 P! ^' L9 E0 {9 m$ {& h- V y
提示:pip 不是内部命令$ U3 @( M, L3 N
你python环境变量可能没有设置好
$ h4 j9 y6 n# H# X ^有安装进度条显示,但是安装到一半出现报错了$ K7 U) T i. p8 [$ n2 C$ v
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
% \, E; q" x @" W7 q4 k" y0 e3 fread time out 网络连接超时 你可以切换为国内的镜像源/ f1 v3 a+ L! M
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块6 K" S* n/ C/ [$ X7 K# z0 Q
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
( X1 e4 D, N: [. v# O' O# S可能安装了多个python版本3 Y' X7 B! P) {7 e! x
安装一个版本即可, }9 p M0 v3 y6 x7 V
Python做爬虫到底可以做些什么呢?
6 G- O( r0 ]5 _
" J+ r& c0 N. k, p# v" W0 V% L3 ]4 x7 f) L
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…2 t6 i' J, ]" l0 Y1 q2 W. ]+ y
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
: t1 D( v2 Q9 ]7 x' a可以刷课 可以刷网课 自动 还能自动批量注册账号
- B5 r$ r( T8 m1 ~" Z- `模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
# k7 P) ^& ?6 T普通B站视频可以爬 番剧是需要会员的
9 L [+ ]6 D# |5 |# A2 A0 y8 |" w4 A' n/ U) s
9 s/ W# m; S: Z9 g爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
# ?+ E. a, q8 m: M; m( ~6 f6 U) @; F$ [- D
h9 n7 h- D1 [ Q7 O
1. 确定目标需求 (弹幕数据 那个视频弹幕)) F8 ?4 }/ b1 z; [9 c+ X
确定了
' H4 o+ f3 S+ m! {2 i2. 找数据 (数据的来源分析)
; z% C4 Y" H1 k 简简单单 找到了/ U0 G9 e6 B2 T3 R/ o
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)* F& }/ y* ?& i9 @ O7 V( h, J$ L
请求方式: get / post* I$ S8 J) V* B+ a/ @# Z
请求头: ! W/ t$ f% L: i5 }( d, F% g' S! |# v
https://api.bilibili.com/x/v1/dm/list.so?oid=3762001968 `$ T/ S& l% H* y
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)+ T \/ R% z6 y* I0 e
4. 获取数据 " I% \- {1 {- X! v3 Z
文本数据 response.text 获取网页源代码+ o/ B1 f' x8 v5 w
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
; O: `% @. A2 P( R1 {9 d6 q 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
2 }: B! _* Z2 n. K8 V* Y% X" e3 Q5. 解析数据
8 n. [; Q3 w+ w" f! M. a+ D9 E2 d 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 ' h& I+ C+ Q# A/ u, E& ?
6. 保存数据
/ I" l$ J( C" ^- h' j1
p/ ^( G2 G9 B4 I1 n9 y2, d0 @7 ?9 J0 `1 W: D Q- s
3
# U- H0 r% S7 Z0 `6 ~9 b, t4
) o2 c* h! S) q/ n+ ^3 B5
4 d9 Q& ?+ b. p' ~9 ~7 n. B9 T% R. i6
: E8 X! e* v2 Y9 ~; V7 |7
" _! `; ~- N) H: R* q8- i$ z* {) o5 z) f0 i" }! c
9
1 P& @0 p& C& v10. ~8 m1 `4 d* Y! c- k/ H
11
" {9 _) N3 c H: M% h) b129 K" C7 M9 C4 y
13
) S) Z4 z8 ^. x) b, @2 q% w14
3 R; M4 X4 G3 ^ n2 o( \; M15
+ ^) x! C, k: q* r. d7 |168 V$ g; x# l- e
python除了做爬虫数据采集,还可以做什么?1 \) p! n6 I8 A; g- W2 Z+ O- s& f5 p6 I
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)+ Z* ]1 X0 O$ R/ L& P
+ ?) W5 r+ Z @* r; N
3 o: H J( h# @% ]) G; t网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
5 F1 q4 Q S1 k q& [5 j L) l! }5 O比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;: k! m2 n1 v) ] n! Y
我可以做到这样么?! z$ C! l4 C' \. Z+ V4 P
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
# U5 w5 [- s$ V) M如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;$ l5 p1 @7 M" ` n
- \4 c" q2 e8 I$ ^/ t7 p g
- y, K) u6 S4 X* W- @# o* ]爬虫开发(脚本)(就业/外包) 可见即可爬; K3 n! i* v$ H7 T; A! f
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!- \$ G: E+ I2 _/ D, d
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
K# ]' U) K: c8 x# K% y! D+ D之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!" F5 u6 _! j# n1 h+ e5 o4 K
" y1 a$ l4 ~! u& g7 h( h9 `, ?
9 a3 m1 q6 ~5 J) y8 B) b
数据分析(就业/外包)) m# h* G- I: `7 W9 Z- r4 P
2 m# @! X) W J* J4 \
/ z: }& g. a C% P& z自动化(脚本)5 i6 y9 V' h" P9 Q5 Z
6 N- ~# i- p2 `5 \/ {" K& i4 e' p) g$ E! M
游戏开发/辅助(脚本)
3 J9 B7 L; Y' _1 ?( Z8 f" P
- x6 t4 h1 l) Z# X# j0 R
6 K% ~3 s! Z0 p- N人工智能(研究生以上学历 要求很高)
& C% u% D7 L# I
) x6 I. u; L0 h B
3 }: }0 S8 h# i2 G) n等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。$ L! c2 f/ `* K- y* r
) K' R; z+ b: z; F; ]
' \* x7 l* r8 v( U$ m% K我们开始正题吧
- ~$ X2 `: U9 A" J) c, Y" j2 G" T) [8 W- e+ A- Q" P, f) p& {0 S
7 j0 |% U" h h A( M- Y5 i3 c2 P2 q8 n& T! p
爬虫部分:0 |5 @9 _/ k: n. q! @( G
发送请求 第三方模块 需要pip install requests
8 Z3 y7 w ]% ~5 H& m/ {# p+ V: ^7 d* z
& e7 u3 Q9 m1 d% z
import requests5 C" T$ E. m. s$ @0 d( f. N
import re # 内置模块; V9 {: {, ]7 S2 |* [" m
+ n: x; U0 t3 |6 [/ k* Y z0 t+ ~% z0 W$ d
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
+ [; p( s& N3 c9 w7 n15 S! I+ ?3 B3 B n+ ?
2% K, k9 o" \' r% X' u
39 P) c% j5 g8 Z% y2 \7 Z
4. y" n5 w# w1 N
请求头的作用就是伪装" u c8 l* A3 b: ^2 Z# w
% ]2 X$ m# T' w) s/ w, p# W. _8 a% y5 a9 O& k9 h5 U/ h
headers = {! S! ]5 i8 m3 h. G- r1 W! P
'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'
a1 C4 @* \( @7 U9 N. S. a}2 k: g; x0 \( V
1+ z* @, E, a+ S \2 T2 V
29 I w/ b6 K& u9 ]. Y' G7 {
3" \+ C2 n) I1 S" a* d, _( t7 P, q9 G
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
) R6 L0 g. L3 X" f# d& R1 C! }函数传参
Q$ f. c) n8 Q' K |& w+ _% j
6 ]. n( K) p# m. f1 x3 ^$ v- B: S& v: U2 {% m) I/ F
response = requests.get(url=url, headers=headers)
3 m2 ^6 `( g, t0 }5 O1
3 y8 ~5 y6 z( f5 I& ]2 s/ f<> 对象 对象意味着你可以调用里面的方法或者属性0 h2 E+ a ^! _& f$ Q# k$ E9 O( ~7 l
200 状态码 请求成功% g# Y2 Q, I4 G/ U9 k- w! M5 l
获取数据 文本数据
: Y s, g: }9 Y/ C9 D% X自动识别编码- }* B) |& b0 R% W
, O+ ^: U& S1 F s" i! W, X
5 W0 L: \3 f h! X7 p& M, S6 \
response.encoding = response.apparent_encoding
( d; i3 w- M3 q0 |6 zhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text); a$ _) S; K: D+ J& q
1
4 A: ]$ t6 T; ~$ k2- F9 i& Z( G+ @' ]/ s4 T) z
content_str = ‘\n’.join(html_data)9 \( B1 d# D8 s O
8 G+ ^2 c% V3 R7 O" Z0 [- G7 {6 C* P; ^* t K" m5 @" }& |# O$ J
要列表转成字符串 ‘’.join(); F3 d, H) B+ f! I3 d
for 遍历
5 O. `+ }, |! o, h3 e+ o* k保存数据 保存字符串
: N. H* _2 [/ a- gfor content in html_data:
. U( ^9 {9 A! W) n3 h9 X6 v1 j # mode 保存方式 w 写入会覆盖 a 追加写入 ^; `/ z: w& x# |/ P! K- e
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
$ b" c# W/ o" O4 n; H1 @ f.write(content)9 A9 k1 ?* Q: B; X2 S' Y
f.write('\n')
( K |5 R8 @& L, ^+ S0 M
. k" d& P$ A1 M3 Y
- U3 U( P2 Q$ ~- R4 J) w& x% a- t# print(content_str)
* E8 z8 U( x( g* J2 u, _: U7 ]18 K/ u% V2 f6 |4 J) K
2. M! o8 Y' i/ H7 G) K0 {
3
5 Q) h- X( q. K0 o2 T4
9 Q0 ~9 U' _: ]; X; r0 U5+ O3 \5 o$ j- c5 `5 P' L( G M
6
; X6 Y- W; S4 U3 t* r7$ P1 b U8 ~0 l- T
爬取结果. m& H% Z/ p/ k6 d/ k- B
' Y% [$ Y1 N' k4 ^; U/ Q- M b& r" t; H1 u; V- l( h
9 Q. f: W& S% F
! {3 L% H! O$ P; ?1 w! e" ?然后我们再来实现制作词云图部分
7 ~6 X+ N. x# M" I/ g" F8 S; g
9 C4 I' t; O( X/ D% B! c( _$ e
3 H3 {; `6 Y! R首先要安装这两个模块/ E+ r7 g. _! {% l9 i
7 T0 w2 J; T/ r8 N0 `( u j
, q) F& g6 @* |import jieba: d0 J& P' `- I8 B* F( w
import wordcloud% d! y- O. P" j2 G* T
1
q9 Q! Y, v7 }$ a. x! j+ ^2
; n7 p9 X# Z3 r/ A( d) N, i5 U, t一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
# k+ y7 c3 `# x( w1 u, [& d7 X; ~% q" _1 d0 }( z' l1 M2 H/ W
: C7 R2 B$ a+ m" x
f = open('弹幕.txt', mode='r', encoding='utf-8')
! J$ f9 g6 f( L1 e$ l2 [4 w; Ntext = f.read()
9 W/ E' z5 ?; A6 utxt_list = jieba.lcut(text)
% b3 X% v2 w" `3 U0 v4 i6 N! o% A# print(txt_list)5 p4 s- w, _0 b3 V: G. D
1: ?6 F" ^2 U. Y! d3 T! Y. q' ?
2
R$ b- B/ K" t3+ v4 ?# V) x8 q2 k# r0 `7 E/ w. r
4
/ ~3 Z7 U% y0 d1 Z$ O列表整合成一个字符串4 U3 L4 N4 {. y1 D
2 g6 D* @/ L8 Y& V P0 E' h
6 w( b- C' v+ }% a' N' J
string = ' '.join(txt_list)
" S, b- U$ X0 fprint(string)4 R& O% I. L' H/ B6 R& g: z" Y
print('---'*50)9 O0 f1 a9 ^! g) @% ], |
print(str(txt_list))
6 N* O: c4 q/ a# l: t9 a9 c1; U3 O; X* ^$ b$ V. p. _3 X5 Q
2
' i( _: c, y. Z1 H. L Z3) {$ d% p" W8 R! ^9 n. L5 l
4$ Q! @! U+ n- |4 L
词云图设置$ x( Z3 X3 X7 s5 t
" ~8 s ^1 J: r L- A- r- ~
3 B2 g" c% ?3 X/ W8 Rwc = wordcloud.WordCloud(
1 i' t/ ?! R5 D w width=1000, # 图片的宽
: E) b' r) I4 c5 z+ ]- Y$ P height=700, # 图片的高7 M6 S3 k5 e: S4 R& f7 V
background_color='white', # 图片背景颜色
/ g/ R7 s, b4 I9 X font_path='msyh.ttc', # 词云字体8 v+ k' g( Z" n! a0 m$ r
# mask=py, # 所使用的词云图片8 l! f" {$ Q+ [" ^
scale=15,5 X0 o' i Q5 d. `4 `
# stopwords={words}, # 停用词# I" v2 C$ y2 Z# O$ b
# contour_width=5,
. V4 m5 i; q1 U0 G # contour_color='red' # 轮廓颜色0 s; S4 a/ g0 }% w* a
)
5 P' j) Y3 \, M `2 {! j/ v1 N1
+ C$ g0 D2 W/ {, ~! M, y2 \% s1 {* J+ x4 X
3
* F4 V4 R' K) Z/ u4. L( \ F! G" r2 Z
5& k# m$ A: }3 n$ B, K
6 ^, A/ x/ {9 Y5 h
7
8 V# C" l1 N( j8
9 v8 u) q9 y+ t8 R97 P- h. B% S% F" F
10
2 M8 j. t( T% [0 b* q11
6 {+ H0 T- S, r' c' v5 a给词云输入文字7 P# H1 ~! w0 Z6 f) }& u
( t/ W% L+ ?; V& ?, _) u; d
' \, I) m: c; K! t
wc.generate(string)1 y3 m7 J: N% G: y
13 r( S/ w0 d! }+ k+ M+ L7 M4 X
词云图保存图片地址( R) S9 ]/ p1 e& u0 X8 M$ e8 A
8 F0 j& I% B; \) [) @
" C2 g2 \) A. Q* V6 p) A3 cwc.to_file('output1.png') t6 t; n+ Z# y; m- N( _; R& S- k* Z
1 y V" s) Y: j, w( j7 a' G9 h9 q
词云图的过程中有点慢,大家不要心急
8 e/ T' I. H$ f5 D2 K! O& i) b8 G8 g" J
; p8 e1 K2 @5 k8 K2 j& G
这是最后的结果% P6 a( _8 \: n! m
, n. Z# }0 U& b: q
' Z$ `$ \) F: g8 C/ X% V; H
没有加停用词,所以一些无用的词比较多
; U# F* x5 o/ s' V$ J
$ Z* G, |7 z1 J9 {& s: t0 m7 ?) e0 p n. n
; {. K6 k! U' t& d: g" dstopwords={'了', '啊'}6 k5 l# A4 g/ S+ \3 ~/ n' S5 m
1
8 x& }- Z& @5 h7 k7 o( [& H把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。$ Z' f1 D. v, V. T
我们再来看下! t: I3 e" X$ O' r9 l% w0 v Z8 q
* n8 ^0 R' t1 P, V4 X2 Q
( V$ j0 R4 D* H- n1 r4 v/ u) N9 l6 J7 |不知名网友:666666 牛批 老哥我要学!!!
+ f, u X5 q+ \6 Z" y6 y' A: y
8 Y+ u4 e) Z- h$ \7 f
o; |- H# v( J: l K9 a% b0 b; f
8 {' H+ l9 a ?$ U. G* H# p& K& `
; k% M6 i6 j/ ], x! S* }5 Z————————————————- ^" F- O+ n" l$ r
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 f) M3 `' ^( L原文链接:https://blog.csdn.net/ooowwq/article/details/119211907! O# S) H1 H! j2 d
9 w& `2 L; u2 {, x: P8 F4 \
0 m8 q. ]. e, ^9 F g1 X9 ? |
zan
|