在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 563298 点 威望 12 点 阅读权限 255 积分 174212 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
# Y& K5 A1 v9 g. m- D# g. r 用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
% q0 k- Y+ P5 G E& i 今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图! 4 Z& h* _- h2 H, V+ [) J
康康大家都怎么说! 4 t e9 ^3 r* g
5 n, c! M0 n- M) L$ Y7 V/ G; w
" K+ u7 w8 \; d, [" V- ]
8 P6 c& b: y/ J6 b% \/ ]4 D2 U : w, B; R' \, w, k. b. P
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。 - B. H q- L0 N) Q
+ h# Y1 l9 o3 ]& p" ^& E* m# H: M
- L( T' _0 }8 e. r7 d 如何安装模块:
+ b4 ~6 x# P- N & |; n& z6 m/ P; Q; c' v4 E) m
3 g( I1 y3 K# |9 K) q3 I win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车 5 I7 ^+ X3 A3 l4 V" {' C( L' a9 c
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车 4 l1 A3 N$ H; |
如果模块安装失败了,可能是这些问题:
$ l5 q) `9 l0 S4 H. \ l) R
- k% L$ G0 J( E' o) L 7 b4 [. m9 R2 T' T$ \1 E
提示:pip 不是内部命令
/ x/ D. d6 ]& W5 Y 你python环境变量可能没有设置好 6 }( C' O1 }9 g% |/ v2 y6 m
有安装进度条显示,但是安装到一半出现报错了 % ? i% N, ]& u+ Q2 @+ `. N9 X. k
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
" G7 T7 [- A9 m) U read time out 网络连接超时 你可以切换为国内的镜像源
* s% u& M8 r3 k! ^/ \; ` 明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
* W6 G# x/ ]1 z 你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下 - U; P9 l. c6 A, S5 m K. d B
可能安装了多个python版本
$ X1 G) i, ~( G: R* p; p, `1 q& K 安装一个版本即可 % ^( I+ L5 h% p' r( T1 |4 m1 w$ p4 `
Python做爬虫到底可以做些什么呢?
% J: W( E+ P% H% z5 @+ Z: N
1 E. U! I1 S& S+ ] & n; [' H$ \1 L* r7 F S
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频… `( e E. K; R5 t( E6 G
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量 8 K2 {. [ r: }9 p( e' U- Q% E
可以刷课 可以刷网课 自动 还能自动批量注册账号 ! q/ B6 h, j4 a; d9 o3 l
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
# u" ]' l" ?( R2 n; K 普通B站视频可以爬 番剧是需要会员的 7 H! }) f. y4 U+ v. N) ^( h9 F
) h- q' O- g$ r+ D, l, r$ S
% B2 i: j( v! ^# _ 爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载) a8 q3 ~- y3 [3 x
% q9 G1 w, I. e4 O2 d
% S) c* G4 I# o% s9 f: B 1. 确定目标需求 (弹幕数据 那个视频弹幕) - ^. }$ f/ C, @$ p% i6 x8 z
确定了 - U9 p! I& d, r, O2 Q' D( i" e
2. 找数据 (数据的来源分析) $ b5 |9 f0 U/ Q5 b1 F0 Z
简简单单 找到了 8 `& v9 w& |/ R: K
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头) 9 v! K1 H5 |1 f( A* q0 @& O" w
请求方式: get / post ) J+ L5 Q6 g0 O
请求头:
4 R% M% Y; o5 J5 z( S+ @ https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
/ W# y- z( H1 N4 P' e (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站) $ G/ f1 H8 I( J
4. 获取数据 3 F e5 g/ K- i8 \/ P! K
文本数据 response.text 获取网页源代码
, O3 K6 t# }" d4 f json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多 6 ~8 `5 i1 p+ |, E1 l \
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 R& y0 L$ T6 X
5. 解析数据
# p& z. A9 L- ~( h 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 9 y+ s2 w* [% L( D* M1 u
6. 保存数据
# l+ O2 ^1 G( D0 f8 d% L 1 4 H+ g* e% y! p7 A; H v8 l
2
% u a- p3 z3 d2 ~ 3
7 O8 V5 l9 e' N% s0 N 4 : v" ?. H6 J8 ^7 a3 }, H0 b
5
& G) h6 t/ o* B' x 6
3 y- |( R0 }! l4 B" X! O+ Z+ g4 B& v 7
& M; V& \ f t P8 s 8 + P1 g. u q7 p% n# c
9 + N! Y$ F$ W0 P0 _2 `, Q
10 ) q8 L/ q7 `6 [( G8 b
11
& y+ |/ z5 d! _1 S+ j; r# A 12
1 f `9 Q5 W% n3 U+ p8 B 13 ! A" B$ V* P4 V {; k: ~$ I
14 8 r3 F, }. m4 E
15
4 e* x8 W/ Z) O! Q 16 ; I" f6 J4 K' ^' U
python除了做爬虫数据采集,还可以做什么? + h! T2 A% S/ ]* ?/ |. B$ g: J
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包) . c! m* O$ O6 F1 g2 {8 ~
" M6 m* i ^3 T0 ]" O
* l2 b: ], H) }- i2 J* h- ] 网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K - D8 e" }/ Q4 W- A+ l
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
2 W* [; g) G) q0 l9 N( G 我可以做到这样么? ' y' g7 G* a! z- l
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站; N6 a4 j1 w' @$ J
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右; 2 z& l3 J7 L9 b7 d# m# d; b
8 E0 U8 E( V) i3 x0 {" L
% @- g+ U6 x2 M9 h$ p: ^ 爬虫开发(脚本)(就业/外包) 可见即可爬
% L7 Q2 _/ g+ q' y6 |! q- f 虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
" U( g; W, C1 X% V1 @& t 很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
) r( m4 u/ \( \; f7 ^ 之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来! % K9 V6 v5 _" K i
: s& y, R& f% O8 [! f
/ z( w, V9 { m" h 数据分析(就业/外包)
! ~" s5 g# [' a 0 Q8 x# Q* }+ {/ V5 ]
- R) W! M! d4 P& S/ A 自动化(脚本)
; q) i: B' b+ o3 J1 F- ?; A
+ m' f1 Z* x3 O
5 @' u. y9 z9 u4 C' ~. l% v 游戏开发/辅助(脚本) ' q7 e/ U( U. I9 b
: P' x; g9 ~8 l' u0 [# ~4 l1 G. e$ k
" @5 K; E$ \/ n1 i9 J- i" D* N% N0 o 人工智能(研究生以上学历 要求很高)
& ^, t, S- a- N" F8 p : j0 K+ y. I# a7 }. R9 Z# e' L
1 b; p" Y% {, K* ]
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
# L! g% J7 P0 d6 M! i
& T# \+ q! t) Y- \5 V7 e0 r
l. m" h2 D) t% m9 k8 M6 ^ 我们开始正题吧
) k' p' U/ ^. K) G0 ? $ @2 @/ V% j- L7 }
. {; t. l, b( S" g+ c2 D- ] q 爬虫部分:
6 f2 Z$ L. G, Y+ E) E1 O7 [2 N 发送请求 第三方模块 需要pip install requests
7 v% C. e J( y" j$ P
: W0 P& m+ {3 M2 Z& d) e+ V$ N+ h $ S" l: u, ~. T2 `' O Y e1 F( O
import requests " y4 z; t/ B; Q3 T+ Z
import re # 内置模块 5 y3 x4 [3 Q- Y5 R2 F$ ]. I
5 b% t. n* ?: s( `, O ; B: O" \, o9 W# d# T! u0 I
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196' $ [6 P+ p3 K! w/ q7 r+ O' e
1
, N' {2 ^' K1 O5 W 2
, @# S$ a3 E9 d" B 3
% i' e' _, J3 O 4 8 j( V$ v' g/ p/ }% o
请求头的作用就是伪装 8 M: {3 Q i9 k4 E* z4 \9 K
& Q8 p' v+ n$ Q& n [- K
* m- H8 l& r" e/ U/ H1 x( i headers = {
& U5 C# t( S. n7 _, D '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' # |' B. a# F$ E6 L, O8 G, G" d
}
8 f6 v# T8 U! k1 j& I; P 1
8 ^1 J! l' u- U7 Y7 W 2 & y* C% G/ O5 M2 g- a
3 1 D& h! H W& I0 d2 G3 c j4 g
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
1 u) ?( \, B! i7 d( T 函数传参 & s& V* i. [! v; y8 p
7 b1 u4 I; f+ E. O3 U" o* m
, ? P0 K) b8 K) U/ j& a; R
response = requests.get(url=url, headers=headers) , N/ @- O) }- J+ Z3 i5 Z, \
1 ! \6 ?5 Z r+ U* m
<> 对象 对象意味着你可以调用里面的方法或者属性 9 P/ X6 m) Z0 S; V/ d- W% Q9 |
200 状态码 请求成功
9 N2 J" o% u5 Q: R9 s* T 获取数据 文本数据 4 t) y/ u+ ]0 \3 I8 F; X( \$ o2 s
自动识别编码
" J, a% {! X6 X9 W5 W( z2 D5 E* I$ Y' ` 8 ?0 R9 V0 J' w
+ F/ g' l4 G4 ^2 R
response.encoding = response.apparent_encoding 8 U, w0 p( G4 C
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text) 8 p$ ]& W: ]2 m* U% a, L
1
$ K/ e# C, l' e* |! J. A 2 1 I3 a0 k7 z' W: a. h: {0 b+ t, b$ b& K
content_str = ‘\n’.join(html_data)
7 m) R5 F# C1 q3 A+ |8 o. T7 ~
$ ~0 I5 Y4 [5 Y9 L- l5 D % a9 o) ~0 A8 M* z5 T" r$ V
要列表转成字符串 ‘’.join()
) L; \( c/ w& p+ S5 O for 遍历 ! ^# s% n+ q/ ~) @5 Y( O3 s
保存数据 保存字符串 + Z% r+ [! l; o' E, X: A0 t5 X" V' T
for content in html_data:
% |+ u5 t2 S$ n0 u3 T' f% D # mode 保存方式 w 写入会覆盖 a 追加写入
' o$ j# Y) ~6 u, I4 e0 o4 T with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
/ C% X& _1 U- @" \. }& J; Y& L: _ f.write(content)
( p/ c' h7 H3 K f.write('\n')
; x I+ p4 c+ y0 ] 6 w; D/ G5 O7 {1 ]7 Y: [0 |" k
7 M5 u' J( c5 ^ # print(content_str) 8 w3 `. D+ i, e+ D% i# b% a
1
$ _8 k- j" t5 W, {; [ 2
- W: E3 X8 w! Y0 d' W 3 & G/ H7 g8 P/ f* \( V- i
4 4 p8 S1 W/ w9 {1 F% ] o. u A
5
5 s. O9 |$ y7 H1 V 6 3 `# t. j" G! O/ `5 p
7
s; i/ I5 P6 e1 q 爬取结果
& O" y( r& J+ {/ P3 C5 t; o9 e8 E
. | c+ F& Z; c5 y) Q. k) _ 0 O" q& x5 Z% V/ H. {! Q( u# x
* Y9 z# c8 a, f. A* L1 b6 ?
* w: ]( H# h4 w* g6 b9 ?3 k 然后我们再来实现制作词云图部分
0 A) `# m' S1 D- P. g ' p% ^* j! T8 L5 S" j
% S6 S( u; W2 W: q* j) [ 首先要安装这两个模块 ' _: V3 R: Z0 q3 \( k; V# d: B
' I6 j* q% D0 F. x) n) L
* R+ w- q: H; ^: i- A# {* m5 Z import jieba ) [- U' A' S+ r& {9 Z) r1 w
import wordcloud
5 G! N; i6 F0 w$ Q 1
2 n: H$ L ]3 B4 |- y% y# a 2 - d! W( S4 W) b
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。 " E/ m" T' h' t& E1 Z4 H% Q% [
2 k( f$ c6 \3 m- D
, J; B0 X; x3 `9 I* a/ q) d# L
f = open('弹幕.txt', mode='r', encoding='utf-8') 6 F: o* W) R% d: u X1 w/ Z
text = f.read()
( q5 V8 K2 f& A& ^+ G. x( P txt_list = jieba.lcut(text) % _, I4 ~5 r9 B8 [
# print(txt_list)
# N+ J/ s0 K: V( b$ r7 ^' k: o 1 : F1 L9 j" z3 S8 p( a/ n
2
" b) h1 B; ^9 G 3
0 Q/ l r! L9 B) k/ W 4 - e4 e# S$ u: I# V! p4 p% k
列表整合成一个字符串
. h8 L; A- @* @2 q8 I. {- n
% m5 k- {6 O. v
_# m0 Y0 x1 D! l: ?+ _1 i string = ' '.join(txt_list) 0 K9 u0 `' A( M, S$ W" _4 W
print(string)
( v" l/ y- O9 \8 V. U( Q print('---'*50) - ]! W) W! x- _* d
print(str(txt_list))
0 D: d g- R* Q9 F$ C! {5 ~) R 1 # o1 V( I- Y2 q# O3 e* c
2 - [- V, t5 D5 n
3 2 \' O* U. p' C4 `% E& R
4
; V' a# T) T$ } 词云图设置
' |' {3 z: A1 q4 H, M) u6 S! ~) M& l2 ` : q* T. k8 w I; m. j! Z7 @
. b: E7 p6 Y3 H6 G: S5 p1 P wc = wordcloud.WordCloud(
& v9 _2 m. X, U9 `3 k width=1000, # 图片的宽
, c7 ^& c% @! y) _, T. { height=700, # 图片的高
; [+ v* S1 q0 d% y1 L background_color='white', # 图片背景颜色
E2 \# e6 w6 ] font_path='msyh.ttc', # 词云字体 ; P0 q p1 E* v- c7 p. t4 O1 ?
# mask=py, # 所使用的词云图片
* o# C, r5 R: ^7 o5 C$ k scale=15, " t( }+ c+ }) Y/ E0 S6 u) B. R
# stopwords={words}, # 停用词
. d& D! j$ M, ~8 ~" I4 B ^ # contour_width=5,
( \) G' [8 z0 j2 N& T! T1 Z # contour_color='red' # 轮廓颜色 & g. ?' M$ @" p+ e
)
- v3 r$ `* _; h7 _ 1
4 j5 w2 V: d! ^/ ?. a 2
1 R& ?/ n4 U' f7 N n 3 ( n, L+ D+ j! l+ \; p
4
4 ~$ I2 a5 O- g5 r4 } 5
P v! A3 }' q1 l 6
( z0 s3 [- { N, L& F 7
|' q/ g* T b 8
- d8 c2 z0 l6 o ]' C 9
! P) [6 `$ M6 a/ V; D 10 # t1 V! M3 U3 s+ S9 U1 f8 v
11
# Y) q0 h* z) L9 Z4 o0 q 给词云输入文字
; V% F) T: b# z. v8 Z1 P4 P+ | ; i, u6 e' D$ f$ L! M2 q: n. L
8 k; M: H4 O0 a& k2 Z/ \: O5 V
wc.generate(string) 0 P1 f9 Z" J' k. O6 x
1 : s4 G7 X8 r m9 L. C* s8 U
词云图保存图片地址 ; ^) O: J+ r6 h3 O3 \7 D2 G; l+ l
+ J/ }2 y% T: p2 x4 Q1 i ( [, Z; E4 t# \
wc.to_file('output1.png') ; p5 F( e* V( X3 r4 ]
1
+ g+ O( a* {/ a! E- X+ L, i' c 词云图的过程中有点慢,大家不要心急
' @4 d( c V$ V l6 _7 p, I
1 v3 P/ U" k# r& H, ?' B- H
; g% J$ q4 }% l: \ 这是最后的结果 - G8 M- o! `& C7 N: m
: E- W7 M3 ? v& f# `% ^
# ~" P! @. k5 O, g, P; \ R 没有加停用词,所以一些无用的词比较多
& J& @# R$ N$ d2 d/ X8 l( v" c: g& q
" H+ a3 e$ t4 Z. s( q
d. {# H5 ~' q: K% M stopwords={'了', '啊'} & Y, w2 o, y2 o7 s
1
2 @ W+ {* P) _: C9 q) j 把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
7 N8 H1 I+ F" @ 我们再来看下 % n" ?2 p t5 t2 i9 ]+ p. d
! \$ b h/ u3 b9 U7 }. Y
; B' X2 \. }1 w! J; n2 v2 a" _ 不知名网友:666666 牛批 老哥我要学!!! ! q Y# \- g' _# B. Z. e
/ O; {* ?! K* }, ~- ^3 z3 f
& M( k- \2 ?/ l( U
& x7 ~; Q' j" Z8 |
2 A( N$ M! d6 {) t' R1 r. @ ————————————————
* I9 k2 @" t; ? 版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 * V, v6 k, G+ ^( z
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
4 e9 p% T4 I% S4 s0 c/ C U
/ e* C7 t4 Z# A3 C, t' @& R3 k; x, M% F 8 E6 E3 _. h& ^: Z: o
zan