- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 562197 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174032
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
( a% X. ]6 ^' e7 h
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!+ N& h5 p( h, s [6 [
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
, X9 @3 E6 H; q/ A康康大家都怎么说!5 X$ }" c$ M, D v5 O9 v% }! n
7 @: _2 i8 J1 o' u1 j
4 A1 M9 o- n/ w
' w+ j, U6 Z8 b% D3 q2 Z
9 M! G! g/ a6 p$ c% a! b7 @" o开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
3 J2 s& G0 B5 E2 _: w, k0 u( `8 `/ \' u* F) s& _+ n" u8 M/ F
1 S0 H* g+ A3 R+ I# K' c
如何安装模块:
) N9 \3 o( I* i0 {- I2 m: U: v$ D* I# a
! B) H6 S! a" s- c& J9 r
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
. p2 H, p* M/ F3 `0 tpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车/ M$ i# c$ i* T* I
如果模块安装失败了,可能是这些问题:+ X& ?) I2 r' e( L$ _
2 y' z) Q3 J# e$ b; R, Q6 a
3 B; ^" M" z- x: D$ b1 O! x( _" v9 U
提示:pip 不是内部命令
) a# h, Y: L+ Y% k" Y( h9 w你python环境变量可能没有设置好
^5 T. K# _' s# \有安装进度条显示,但是安装到一半出现报错了
5 W. x$ [- s- f* |1 i" |因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
" P' }' r$ ^* Jread time out 网络连接超时 你可以切换为国内的镜像源4 N; U6 R, S7 w* `2 o' g, U) C8 N; R" z
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块" O1 X1 A$ ?& e6 q3 _
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下1 c. C4 `3 Q( e" Y
可能安装了多个python版本9 y5 b5 e' e9 ?8 ^/ b- p/ @
安装一个版本即可
# v8 l- i/ @3 M; IPython做爬虫到底可以做些什么呢?; ~6 |, ]! _6 S+ b0 o8 p" g
1 d( Q: P* O" R3 o! M: ?/ f
; g F# `2 u% {5 I6 t& p
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…: d( o% F( [1 L& K& L
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
1 |7 ?+ E$ i2 a1 Q% k+ ?, ^3 y可以刷课 可以刷网课 自动 还能自动批量注册账号
% @ a2 L$ s( L6 f: C模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …% w1 B+ J. S* K# u
普通B站视频可以爬 番剧是需要会员的( P* ]! K$ ~) _+ \& y
. r6 ~) p' y% _7 r
; {' B2 V$ A( C1 g7 C7 ]爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
% k) b0 ^# `' ^8 f
5 p7 _2 Z& |( S) Q+ ~* d1 p) g; P( \- y( R6 H' b
1. 确定目标需求 (弹幕数据 那个视频弹幕)
5 q \6 ?* w& y j5 L 确定了
1 k, u+ \6 M0 d2. 找数据 (数据的来源分析)
0 T" m: d0 R& W/ u6 { 简简单单 找到了+ G' i" [2 ~' O9 {; u
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)' G$ b( T( v: R9 w% I
请求方式: get / post! x e- C6 O: n' Q
请求头: . i$ |* w6 h( t2 V
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
/ s" n3 n" t/ V( N" g (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
6 S0 O! g' z6 {5 r4 r5 e4. 获取数据
" u5 Y6 W; E# g, c 文本数据 response.text 获取网页源代码
4 u# ~( Y& X7 t5 L- a json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
0 x j2 @; A1 B1 @ 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 & G5 | a0 P# z% R3 h$ q* S4 f# p% R
5. 解析数据8 u7 ]# I Q6 U4 d/ r
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
# G4 z6 N7 h# @6 ]; @, A& o$ o5 x6. 保存数据# T6 x* p: P! Y4 C* o" n
1
5 N: p/ ~$ q/ o2# D m5 S6 q$ C# O5 q
3
- B) t' N+ j; s0 F3 W4
3 r* L& g/ e. R: d5( Y5 C* @6 N6 u
6
) ^* Q# M. M4 ?7 X* |7
9 p- t# f4 o, F; J, U7 D7 L8
0 l) V8 K; I! H9 M1 p4 c96 G" j9 d/ t8 L
10
9 s& a% j: @5 w0 y11/ T" t* ^ Q; u* d3 h( {
12
- w# b7 U8 |/ ^* ^13
$ \* m7 _+ S( d! f9 M# N, @1 _! [, z7 K14
# @" P0 Q' C8 O& L& ?8 O15* Q3 N; T" a. [
16
/ m( @( K) J! W: L1 v: tpython除了做爬虫数据采集,还可以做什么?
) I. ^6 j1 _0 n; j6 b7 y2 U兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)8 I) g9 E5 ~3 P4 h6 |
0 H7 {' l2 Y5 @2 u9 l* A
) ^; `: K! J; q2 x8 b1 H网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K- |- z3 c! ]' X; E
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
8 v' q+ z* d3 ]- Z, l我可以做到这样么?
# A" M5 x' q) M' k& o$ I& f0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;) \8 Z/ x+ G0 h
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
. U* D* l$ g& R3 H' i9 U7 U
( H% a, m/ n4 t/ n6 m
L6 v) ~0 K) y( n, U+ \) r' ~5 _爬虫开发(脚本)(就业/外包) 可见即可爬
' ^( ^- a3 T3 o6 N6 D虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!% Z% e9 I8 s' z
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!2 |# j B2 n: y' R
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!5 G; q7 `) `7 h& ?2 z
/ k9 z. c8 u' \6 C6 |' B. S9 v- R% q3 ^! l5 V
数据分析(就业/外包)
$ R8 \" h+ D& S X, s( w0 g# i G5 q) l2 W$ |# |; M+ R
H" [/ h: _1 ^5 m4 _- s; l
自动化(脚本)
+ v8 }6 U: a3 P8 L: C% K% `' f1 j6 L4 g* ^, {! C2 J- y
2 R# q+ z4 K: L" E S8 G; a. v/ _游戏开发/辅助(脚本)' X5 r3 l6 W* d7 g4 t J
" t3 o- g5 Z& u t' I( l
) H( Z8 P/ d. K# y8 k* S& {
人工智能(研究生以上学历 要求很高)2 p+ [3 d! c3 z
5 r; M c9 E# S" C: i, B P6 m9 q* w2 y: f
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
5 S$ m* s+ b# |0 Z; L4 w! r# K5 ]7 j% `
2 t! @2 A5 h$ \7 p6 V
我们开始正题吧 q7 Z }+ D0 X$ Z; H" U
3 j% E* Y6 X/ h8 _3 \+ u# L+ i: B
7 |6 @ w- l# M8 k7 Q0 ^爬虫部分:8 i% q3 y9 V8 r( j. E: t
发送请求 第三方模块 需要pip install requests
4 p5 n! G, m( m; x( d
& C& ?) j/ ^2 H4 V6 W6 R( P6 i
6 t4 }+ e* h2 Y: k( F1 g0 Uimport requests* e6 v" Z( K: r/ [1 C
import re # 内置模块( g6 p( `% r- [& F- S
/ W L3 H" E F( ]; i8 Q- G$ f- u. \% Y- ~. Y4 P% l; h0 }- I
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
i. W* j4 }* K% ^1- a4 \0 R( [4 `$ Q
24 E, |7 ?; P7 G2 ^# z
3
7 L. n8 `3 @3 f/ r4
) r9 S2 c8 B; g; t5 a4 n请求头的作用就是伪装
5 K( V0 Q; ]+ }; Y% {8 L" w, W9 ]) p- k9 G* S/ l: Z+ o+ c% C
8 [- |* N+ r; T9 |0 q4 Dheaders = {
- y' ?0 v. k5 H) s0 p: ^# o3 D& c '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'
3 B. `& U5 q# H4 ?}
$ N3 A( Y6 b$ r6 ]9 a8 ~14 {9 |9 G0 i' ?9 k0 u. Y M4 @6 R
22 h3 B( b4 Z2 b
3/ ~- Z0 e7 \) D! w+ n9 s
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据0 K0 k L7 d9 \' ?, `7 r# F2 { L
函数传参
( \& p* T+ W( |; t- t3 k
& s7 o' ]& O6 |' G$ H, T2 a- u7 G4 V; C- v
response = requests.get(url=url, headers=headers)7 I4 ^7 r$ j8 q' C' z: B9 t! ~9 E
1) w0 s/ \! ~ e. q2 M; G2 Z6 @
<> 对象 对象意味着你可以调用里面的方法或者属性
) \4 {1 X. i' k: B1 }+ @200 状态码 请求成功( B; N) _- `7 @7 @ R! c( T
获取数据 文本数据% n$ ^. I! n5 w7 C: }, {
自动识别编码
K* Q3 S' V6 `
2 x/ O3 b* y- ]$ f# @: Z- @
' ]: Y3 [4 }0 _% c- f; yresponse.encoding = response.apparent_encoding
; i+ c: h+ q' r' b. o$ r. i( yhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
. _0 n9 G. C5 S8 {$ w! D$ p U1
" d0 y+ C- C3 l# g0 S1 W W2
i4 | ]8 T1 X: X& l0 d5 C dcontent_str = ‘\n’.join(html_data)" K5 r6 f- D6 J' }
^' {- i: v" v- z2 J- w
# C5 g( O: Y: W. `: e% x8 E2 V要列表转成字符串 ‘’.join()
, M9 J( C) `0 x U. s5 G [, gfor 遍历
0 M4 Y8 V9 Q! w( }' |保存数据 保存字符串' {$ }/ E4 L7 w$ g4 O
for content in html_data:
4 y+ u/ j+ e2 d7 j # mode 保存方式 w 写入会覆盖 a 追加写入$ u' R6 d! B6 ^
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:4 m% M" t9 j) O: X7 T/ w
f.write(content)/ q; s! K1 M/ s4 I' B( Y3 d
f.write('\n')2 g' u9 P5 O4 {4 ^9 I1 l" J
: M8 p5 c% ^4 E2 |
2 I* E% D' B9 X3 e, d1 p# print(content_str)
. q5 F1 G% f7 {* \' a1
, ?2 u5 A/ @) R6 k7 f; c/ }$ |3 A2
1 \& E! ]& P/ {* _; y3
; v9 h7 z( o$ k* H& A, U+ r4
! D$ _0 a0 y6 z7 Z5! W* v) |/ U% k9 a& P
6$ B7 g% x. j6 }& K
7& }3 K# j' v: b% I
爬取结果, _9 \) {) M7 l7 I
( W% O. h8 C6 _9 e; f6 N! U8 L; ^) A6 ?% f
% h( ]6 |+ }5 z+ S
. R5 }! t4 I# e' Z; t. L8 r
然后我们再来实现制作词云图部分
) D, Z$ ]$ h* {! X
3 m! @9 M7 _' H, P: q, b; h Z
T4 _3 [' O- t6 j2 `9 k- w' i6 c3 `首先要安装这两个模块 s; v/ n4 d+ M( ?3 M: M
# S" j9 r4 K8 n# B2 e" X: z7 P' l' X! I* l8 Y
import jieba
2 l( C5 I- u; z3 iimport wordcloud
; Y; i( I% f+ O1
: v+ ?! `5 F9 d3 n& {1 m2( `- @9 e; f+ d7 G3 r' ^
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
2 v' a3 k7 R# L( U7 y2 d7 q6 ?9 K% y7 R; u
! Z! R( q2 Y; S/ U6 n, T5 Of = open('弹幕.txt', mode='r', encoding='utf-8')
+ L# r) }4 \, q7 \8 T6 Ttext = f.read()
6 N0 _( Q, }8 @; E/ T5 _$ D8 `txt_list = jieba.lcut(text)1 n* L# V* F' ]$ }! |1 f7 K
# print(txt_list)2 h& l! J, p3 s, c
1
; ]" \$ B% v5 M4 Z+ J' t2# Z# z8 v: ^) k8 C+ |
3
# e3 q/ Z& V5 ]. v: D4" @2 S5 t* q6 L5 X- Z
列表整合成一个字符串3 e5 @( ]: j$ c. Q
7 l6 e# S% R& i5 ?
1 V2 K7 y# z: a1 O" M: Qstring = ' '.join(txt_list)" e$ ~; H2 B1 [ b7 A2 Q# W. ~3 F/ ?
print(string)
1 P! p7 q8 w3 U; y8 Aprint('---'*50) w5 B: t" ~! A* D9 w
print(str(txt_list))
5 S3 b9 p+ w5 _14 O. g M- O9 [$ [! D* A5 Y' B
22 a+ q' b' g) \: P* {
3
# x: r: w" P B5 J; |( X1 j4
/ s! s- b. x% z/ J9 ?词云图设置
( W5 m l% N/ E
6 z! s, J6 U. m* z! G' N/ f& I' G1 v4 J5 y
wc = wordcloud.WordCloud(
- G& c2 p* W5 @ width=1000, # 图片的宽
: o$ ?4 p. y1 s9 S0 o% x2 g1 N: j height=700, # 图片的高* z' K. m2 B1 q+ ~" }& G. F
background_color='white', # 图片背景颜色8 l" q; f3 y$ O) X; l3 |% J3 Q; X
font_path='msyh.ttc', # 词云字体* e+ ^, [0 U( s5 s
# mask=py, # 所使用的词云图片
5 H' S# I8 Z; O- I" _ scale=15,
9 r& b' Z" r5 a* z% i# q # stopwords={words}, # 停用词
7 y) a/ N0 P/ m5 o8 ?4 e # contour_width=5,( a9 M. A; _4 O( N/ H+ N6 G
# contour_color='red' # 轮廓颜色 c/ i9 h, V6 f2 X+ f% j% T
)
0 ?1 N# e2 R/ I7 c: Q2 `9 F# Y( f1
- v2 D! X% z$ C& `1 G2. ?* B1 e, v" @2 Q5 e j+ f
3
- R" \. x' g% [7 N4 t9 z4& o5 n* T7 z R$ l; t
5* N# W1 h2 \" G& U: p9 M0 h
6
) C5 ?0 a) r' [* b7
2 ?( X$ T2 _8 Q. L. g8! x2 G: A+ k5 c/ Y6 `
9 h6 G1 e3 O e3 O& y5 h! j
10
, k; V$ |% b; V% |5 Q1 U116 ^) V2 n+ m6 r; t. a! n
给词云输入文字
1 }6 C0 ?, X* q9 b$ ^3 U
3 ~% J6 Q2 S/ \0 p# q, u
" Z# z1 E! a8 z0 ~& W: Xwc.generate(string)
9 h, w: c* P( `. d' j* L1
$ {9 Q. X' _/ _5 _( w) R s" W词云图保存图片地址
+ v. h% D( L8 m
7 d* g3 [6 [% g% m; x! ^
; h# T+ e8 Q8 c+ ]0 A5 P$ S' iwc.to_file('output1.png'). W+ _$ x! Z0 I" V; U h
1 X8 O0 }8 z: g
词云图的过程中有点慢,大家不要心急
" Q! U& z' D/ b5 i; E% W
2 a8 m9 g7 q( ^ T5 k" U- Z; h
4 M3 l' b# y3 [: i' {" z8 q4 G$ ?4 Z这是最后的结果9 s. m- O9 {0 q$ H2 _0 s Y
. U( i$ y$ O. `# o) p* k+ y( f5 u4 Y
没有加停用词,所以一些无用的词比较多0 r' [& T! h/ Q
* a6 r8 d* h( X0 i3 ?' b
; ]. Z) H! [- F3 W. ?stopwords={'了', '啊'}
* w; T) K7 u( A# @0 l1
6 a3 B2 U+ y) q$ I( I把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。# }$ X1 Y; o; t: R$ X
我们再来看下
2 f- ]" Q. C, i- x3 [. G; H6 V
: m$ b. c% S" x: Y) ]; |& o S! X& |1 k1 _
不知名网友:666666 牛批 老哥我要学!!!
% U t v: U; c" i. c e2 F5 B
( V8 V- s% b+ W% h" A1 r( C( ^# z/ H& j" b
# g3 k5 n Z: z& {
+ L; l) e5 U) B( N; U' q————————————————
* v1 y2 ?/ Y+ R9 K4 q+ S( s版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ K+ j' u2 Z; \7 J) W
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
0 j& P4 j! K: N7 R" L- n: P
3 P8 V$ W& L d! C; D" m3 r
% n" }9 n! G9 ?. @" Q3 e" s |
zan
|