- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565611 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174906
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
! k1 G6 l: L$ J( p7 X& A# s
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!) k9 g6 K9 `7 g3 z) i
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!. @$ q* [+ B% |! E" m2 U
康康大家都怎么说!
, R7 F- `& C( A* b- g2 n% G0 U, [4 b2 U! Z ~* ~) n" Y I/ G
/ A$ u K1 V" ]& @8 P9 W. D# s
; k' |" m7 u8 R5 f* \0 @9 v2 M' y: u, V
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。" t3 p2 t* a' o7 ^8 T N: R
# B+ U1 ] O8 B1 S$ h4 c$ y
# O: y C2 X! Q如何安装模块:
$ Q5 S! `+ ~/ W) R0 ~# j) _% n
1 v1 _& O" E1 ^$ T
. k( n9 n# p- A6 a: {5 pwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
3 J5 k% f7 t+ n: ~* Jpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车) v% P1 {& O" n7 r1 E* j- ~
如果模块安装失败了,可能是这些问题:
4 B% Q" z. Y' h0 R2 n, c$ W7 G1 V, l( h+ _! C- I4 n$ W3 l. p! S
+ h# D, C" z0 I H) x4 r
提示:pip 不是内部命令
2 y0 s' K6 p8 f( R你python环境变量可能没有设置好5 a" b' a3 t, ~1 q. j2 f/ v
有安装进度条显示,但是安装到一半出现报错了 g* r* y0 p- u; }! A! ?
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB9 K5 N5 e- r# ~1 ?4 o
read time out 网络连接超时 你可以切换为国内的镜像源1 _- k y8 X" U' \- f& t5 w
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
B6 a0 N4 B+ B你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
h4 w; S) I0 R0 _可能安装了多个python版本
# ]( Q& M1 O# h8 c s/ Z# v安装一个版本即可
* W" W* r- b. \1 ?* A6 {Python做爬虫到底可以做些什么呢?% [# H+ T: E/ W: ]
% |0 B/ a0 ]& Y8 C! |3 V
7 ^6 `9 Q' V/ ~$ h2 x2 \" M- t常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…- x3 o6 @$ @" @: E5 H4 ^0 _. p
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量4 G9 N- `; v* Z
可以刷课 可以刷网课 自动 还能自动批量注册账号
2 V) U% G5 h* j s) A' m模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
1 `( J& m) u8 t' Y普通B站视频可以爬 番剧是需要会员的
' \3 q- }% |+ s% L6 Q1 O1 v
. L* d- }, \1 F% m( |
O1 c; q# K6 T9 C8 i爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
! @. ]1 n) b* w
/ N( w U* W) \ R; M# c2 ]" C
$ j' p ~2 f# I1 Q, {% W( n, F" P3 G1. 确定目标需求 (弹幕数据 那个视频弹幕)
: w l0 O7 [8 k! I( _4 L( ]; p 确定了2 o+ Q* `* g" T( t, g
2. 找数据 (数据的来源分析)
- R. t/ n& `! E 简简单单 找到了, M! M$ j4 p9 s5 z- z- f: v
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)- b( U7 ~; w" m/ R- e
请求方式: get / post
, V( G& N4 ]; O" K3 V 请求头: . p& D4 y# j; u
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196/ N( @( |. Z. j4 V0 }
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
; n8 [/ j6 W) q0 i, ~2 K7 e0 a4. 获取数据 * O& X) z( B8 v; ~4 D. G
文本数据 response.text 获取网页源代码4 U2 I& Q/ U0 w+ c( i8 ?
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多8 @ r3 {6 l* m5 I
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
n2 h' R7 l: r7 U1 a5 N+ r- Q5. 解析数据
: U" U3 k3 f. W9 U 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
4 o: K- N1 t( C3 O6. 保存数据
1 s# M `, k7 `/ I( r" w1! t- C3 c( h. l5 Y
2
7 D! h+ f1 o, V3
$ Q4 C! h J; G% L4 O( F4" p0 D& e# N2 b
56 C( R U% [3 R! a
6
6 c& ^3 S0 S& T" ]7
- _& z( g7 e8 ^! Y; Z9 a8
! `5 V) {0 @! Y. }9
. F! D/ ?* e" {3 Z4 n5 a' g( f% I10
2 N |4 o. r- V+ b, H5 H11
+ u! F% `4 O; ^* h+ j$ D* q12
" G* e% a0 X3 y F) [. `& O13# t$ Y8 M$ i6 ?0 k4 K$ Q) k
14* O+ a. @* j& d
15
6 q& {& W8 U, P g* i$ r# S/ Z16
; j: p- F2 F, wpython除了做爬虫数据采集,还可以做什么?
6 b7 k% F# ?+ n1 @* ?; }兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
: m$ x X+ V- K+ w: t+ g+ {& N( l1 t. C
" c3 I4 r) @8 F3 I
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
. j4 X1 [5 a) o8 r; d比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
, H9 t) B& [: z4 \( U. [: t- @我可以做到这样么?
9 J/ N' s7 L) D" a$ {% Q0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;3 E. V% ^2 f! |
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
/ t3 ^# G$ T f, H5 [- C5 t/ `9 `: k+ e- i# e
9 o# C* k$ [2 z爬虫开发(脚本)(就业/外包) 可见即可爬
9 |* A* ?: e; y( f虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
- K: |& T5 v1 }很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
1 U3 Z0 X& ?0 W7 }3 X) o' @之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!) X, z" L' U5 ]( _5 k! S0 I! `3 m
' v! ~4 e8 _0 R4 z* N( I( u& _& j6 F; X- v
数据分析(就业/外包)
9 a+ i- `( R1 f3 |" G& l4 m) Q; o1 Y* w, i3 c" W# ]- ?0 c& M; \; X
7 ~& r# d% S. _: W
自动化(脚本)
* Z6 K/ Z$ ^- v q& n1 q2 W; V- F9 W i* t' f2 m2 I4 j& H9 w
. `4 J; t% c0 Y! \2 z q. p8 C游戏开发/辅助(脚本)8 G8 d1 z5 ~* R) O, M8 f! u9 ~8 N
3 X) z6 h' {8 A
# g1 R( K3 q2 B: a% _! [1 F. k人工智能(研究生以上学历 要求很高)# l( H4 X; s/ s/ a- I; z
+ I9 s- a6 U2 ]) @# x4 y/ e3 B
3 E" p4 N+ A5 U+ Y9 _. \等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
; C c+ K4 I! v! n5 W8 G, o$ e$ y% o
; L2 r3 t: j" X% S' [我们开始正题吧
, O) Q2 Z5 F+ _) X* \" V. U% ]: ^" m- L
* W9 R- q) Q6 O爬虫部分:/ L7 m" K! c5 v6 j
发送请求 第三方模块 需要pip install requests
3 [- `; C s9 I& ]2 k! i; o& Z; u/ P# |: }
9 z6 v+ a e7 U, V) O6 i0 Z5 P
import requests
+ g0 D3 z9 H# x, eimport re # 内置模块
5 Z- }! q! V- `" C ^; i1 I: J! _1 C% s5 V5 m
1 W, f4 \4 h$ B! o) Y. Uurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'# ^6 R: w( v; `( ^
1: C0 ~# n6 a! l* s) C' x8 F
2
6 r6 x8 F( t( i% e( R6 Y [2 G3" k! q( A" x$ l. v2 V! ^
4; ]+ E* G2 ?: h0 e+ L- v4 \
请求头的作用就是伪装4 @. Q( n' \- w- I. w( v) n
4 e/ C6 X& K; d) U; u2 ^8 p! K
; @2 O$ I9 M: [$ _! ^headers = {
7 a, A o! G. V, o1 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'9 @& l2 Y4 l+ j) R* U* p2 o
}2 V& D! N" k2 }9 O' f3 _/ N% C
13 U9 t( j! g( {
2
0 }# {9 W6 e2 N; b3
0 T e' H& x, a8 d模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
* r2 ]: w' {& b" o* W函数传参$ m- E- v; \$ k$ v! {2 B, B5 `
, `" Y1 i! o2 q1 C- P$ w* Q7 c Z& O4 |. H' m0 R( V+ T7 P* B: s
response = requests.get(url=url, headers=headers)
( d# w) ?. V" I8 R. M n10 w# u3 o: q* I7 F l
<> 对象 对象意味着你可以调用里面的方法或者属性# m6 t- B7 N# R7 T3 N9 r
200 状态码 请求成功# m4 r5 U; z1 V7 z9 B8 m5 C
获取数据 文本数据
: h7 Y9 ^$ {' e2 _ i自动识别编码
' P; l! G7 c0 e, D. m9 \; V# E
1 [ B/ p# s$ i( `+ t5 x/ u; I. s4 Q! E9 \
response.encoding = response.apparent_encoding" j& d7 ]% w/ y
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)0 @1 G& M# A2 R- ?0 n
1
2 T5 K+ s3 D6 z$ C2
/ @! _! E- x) P( e( Ucontent_str = ‘\n’.join(html_data)
% c4 `2 B, n9 [ M9 V F0 ?7 P8 g7 K v" `" C& V8 U
- J7 g9 `7 J1 L3 T2 A
要列表转成字符串 ‘’.join()4 D9 ?% ^" m: m, _# c t
for 遍历- Y- ^8 c& p5 T8 m
保存数据 保存字符串 y! X7 H+ B/ U
for content in html_data:
6 [' v3 [! o3 u4 c( m- j # mode 保存方式 w 写入会覆盖 a 追加写入 c9 K9 R5 A D4 D
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:$ ^# z( X8 C M7 k" k+ d1 _; W* `" b
f.write(content)
9 j8 D" n' O+ y! m; D! C f.write('\n')
& A6 O' e, T. Z) i6 ^' V! Y% f# }8 \- E( v& ^( j* e, J: @
# `1 o4 ` X. ^! u$ q9 s
# print(content_str)
; P9 H3 g! h! b" L9 K+ u. i; d& L1
) r& i7 D3 S3 O7 S" C H2
$ F! A4 Q2 k9 ^3
3 H2 q% B6 R/ y. X# X! v4
$ I7 o+ `% p7 M. {# f% R5
' P' y: \. j- P) X69 t/ L% X4 U' v6 v d4 L
7
# Z, D4 A1 z: ^. R9 m爬取结果
. z4 W# e5 u" N
- l, u2 n& _5 p- j1 _/ l
9 _; e! n% f5 O: Z' A4 `1 O' R7 ~! N- |; b) c+ [- q
3 Z& G! ^5 P& D' H+ Q1 W然后我们再来实现制作词云图部分! T& _5 g, f$ t% f1 O& ~
% V- t2 l4 D$ u* G
( E. h! R+ T6 h
首先要安装这两个模块
2 B4 I1 m$ X0 h, x8 b, o
+ X0 L0 J5 U7 b% \1 c h" ]
5 s' D6 H1 l- K2 {% i+ c6 cimport jieba" P& v; d4 i8 b. b0 C6 `* b
import wordcloud; f) J1 K3 i$ o- q
1' L; X( [1 D% ?! k) q
2. l5 ^- s8 w. l, }7 I4 `# f
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
: ^) \! R$ A' a- f' m3 @
& O0 z! i$ I l
+ c* X; |, {5 `. b' Z! U* ff = open('弹幕.txt', mode='r', encoding='utf-8')5 R0 O& K6 R+ m9 c& T! u
text = f.read(). [: `- `& B! P
txt_list = jieba.lcut(text)
; b: e ^8 l. \/ S# print(txt_list)( ^" G# H: E7 B- T) v3 [& a
1
8 @5 ]- F0 @. L* u6 ?. `2) f4 i$ p; I t
3
3 Q8 W0 w2 k7 D9 {- O. w! e0 B, z41 Z# n5 A2 B6 V4 w( W. d% t
列表整合成一个字符串; M( m" d. R. ~8 t; H( P4 g
6 U. e+ s9 q+ q$ u) \
( f# i+ U- S$ Ostring = ' '.join(txt_list)* ]. O7 ^- d5 } ~- ^7 U
print(string)" g; Z8 J; `( A/ w4 c) v3 z( |
print('---'*50) \' V9 c% K) E" e
print(str(txt_list))
! T! g8 {; |$ `$ ?1
1 A F- t h; p2 W) Y9 `2
8 }6 U4 h; ?1 d3 |% `37 c. |3 M& P$ O( z( D+ f
4
2 {* {" n0 ^$ F" V7 @- h词云图设置
) i! S' ?& ?. E% P7 J3 S# H4 O& P
) B4 p) X; a/ S/ n
) G8 ^& [5 k: u# pwc = wordcloud.WordCloud(
$ y8 Z4 v5 y8 \; W ]* i width=1000, # 图片的宽2 {2 I2 ]% R: Q- A/ ^. q
height=700, # 图片的高! P: H ]! i8 C& W; K0 d
background_color='white', # 图片背景颜色- L- n" @0 B" j1 f6 {: z- t5 Z; }) X
font_path='msyh.ttc', # 词云字体
1 E1 Z7 Y) J% ?( d # mask=py, # 所使用的词云图片
/ X" Z0 e& f5 r# j scale=15,: n7 W+ L0 ]" {
# stopwords={words}, # 停用词; X! Y6 }3 E4 s" s' g
# contour_width=5,/ x e+ o$ w3 O0 a- d5 x" `
# contour_color='red' # 轮廓颜色& p9 C l p( H8 @( b7 x1 S9 M$ p
)0 @4 X* r) a( r: `- x
1, t9 f" J- W& @# S0 i5 O
24 w9 q& J9 F; e0 r) _9 n' u2 q ?
3: H# \6 [# u0 N, A" k( |
4! L4 t( ^0 z' O6 X: m, y
5" h$ U/ }! F4 A9 t6 k
6' K; u3 O$ _/ y7 _0 m+ b
77 \$ d0 ]! ?- h. y3 I2 P( Z" Y6 K
87 c9 { v" }6 U
9
7 n# P2 O8 ?0 m4 a" ^10
* Z: T0 g2 K+ Y" u5 R: D113 l; _% W% u! ?' n6 O" K" v
给词云输入文字6 m7 }9 O" u1 g6 f9 d9 Z6 d6 V
$ P7 _- Q5 }" k5 V4 o" D' } u
$ @; V: @$ e2 ^' ?& K: R" r: z$ j1 Q
wc.generate(string)
9 W: s) C" g0 j- f1/ H8 l( T+ i. \+ l. ]$ Z. D
词云图保存图片地址
$ T5 v: V5 L' L$ ^, L4 ^" r
+ s3 Z) U [! f# p6 E9 l7 E# i& |2 h. C. [; `( N, V! k9 k
wc.to_file('output1.png')1 @! |5 V( p: I2 n8 D2 o5 R
19 f' Z5 g, L* z& c$ { }5 l
词云图的过程中有点慢,大家不要心急& `7 K. h% R/ l W9 L) [6 c) f
$ j& L, H% H& y( c2 t) ^) J
: Q) y4 a; M7 Y5 q# @. E b这是最后的结果
% p l6 z, Y4 `6 J0 y$ S
( A0 n3 Q% L& V( p0 w& e- n3 c) A# H
没有加停用词,所以一些无用的词比较多
. w* d5 t- ~4 j1 D4 @( x8 \) k0 P1 F, ]4 x- G2 ~% }+ q4 Z8 [0 x
& P( D7 M9 T' \7 o1 v! r& V+ ^
stopwords={'了', '啊'}
7 ?" q% j3 m+ p- U1 t1
7 A) a- _6 |, I1 q9 E! }把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。" @9 t7 ]9 |+ t
我们再来看下
2 l! e+ H+ z1 q0 \) o
3 ]+ C+ j. _4 ^" z0 X0 j! E$ D
; [ o2 @2 W- Z& f: U不知名网友:666666 牛批 老哥我要学!!!6 b& s: E6 N: E# M
. O1 r, r! L/ ?9 D) `
, A5 c' E: E! u5 S1 U7 \; ?% n9 f$ M* t4 q
; e4 q# ?5 l+ \% i) r5 u1 G; V: g
/ ]; a C8 C8 L, {9 ~————————————————
* N O* e: X! L: ?$ n, A1 V版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
7 e& x9 N5 e! s; h5 o5 D原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 B& z8 U( z. v5 [. t
+ Q! S% ?5 e& f
V% o2 Q7 Q$ L$ b |
zan
|