- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563283 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174208
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 z4 \( Y& x/ I) Q5 l$ Y2 f用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!- ~3 t0 D" I! z k, Y; U. s
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!8 V7 r4 A, m0 V# ]* ~
康康大家都怎么说!
( H1 K% S8 v0 I( o8 b0 @: ]$ R0 H5 m" [ R
5 t' \! t3 i4 b" ^
" e* }7 x$ `% J* n
+ ]% j& H7 }9 N: C+ s: e开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。2 R, p7 X3 P0 h( c5 V! }- ?7 b
3 y/ A6 A# F5 V0 E
1 @' X' e; p& t9 s4 {' a9 F如何安装模块:% z }5 T" ^- j' I& D$ ?$ R
2 n3 t8 V# _* G1 Z
8 f8 i5 K, d: _4 M1 j1 @, Ewin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
/ g! w; F! d# `* Ipycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
" P! t- t6 A. I5 d/ l如果模块安装失败了,可能是这些问题:
1 j8 \4 W0 i8 X, |- o. Y* u
3 M4 r5 h t( S3 {
: B2 N8 U/ M5 y# v提示:pip 不是内部命令
: E$ ~2 q7 K9 l2 A你python环境变量可能没有设置好* @% h7 [& v" C
有安装进度条显示,但是安装到一半出现报错了, |/ {9 P: X, D7 J- n: `* f
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
0 j3 D% \3 P+ }9 c2 }* _6 q$ Oread time out 网络连接超时 你可以切换为国内的镜像源. H$ t5 `: C, X+ e/ ?( i" F
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块' T- l' ]& k3 U8 ]& e
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下! j9 {3 B! h" O
可能安装了多个python版本; ^3 R2 @" n, M( Y' f+ c3 F/ P6 v
安装一个版本即可
( u! H3 U+ F4 l) y7 qPython做爬虫到底可以做些什么呢?
* N1 b% _( j& U# e6 a
5 i! W c" q- K& Z V. o; T0 w
6 M4 }7 q% h( W& |" J% o5 D8 W常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…/ Z! ^! T3 k6 T& n: B
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
( _- o# l+ ^1 G, t0 x* P可以刷课 可以刷网课 自动 还能自动批量注册账号' `* B( a0 H% ]: F
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
; |9 K% }5 L$ f普通B站视频可以爬 番剧是需要会员的
- {, @0 E3 C& O( L; M$ {
2 R% ~1 }0 D: c) L( R% U- U$ r2 I+ q, r! {/ G4 Z! Q9 m
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)" A5 \; c. x& H. | E5 O6 L8 y
" {$ g! _ u. n- j. ]% N1 [
0 w% Z( t* g5 n! z1 Z1. 确定目标需求 (弹幕数据 那个视频弹幕)
- n1 ~+ R' N" ~: P+ F 确定了9 ]7 E( Y( ?! h5 A5 t1 x1 Z6 X
2. 找数据 (数据的来源分析)
: m9 `0 M( _# c- x 简简单单 找到了, n- g: i% L& p3 l
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
. Q7 p: u4 T9 i* Z9 @ 请求方式: get / post, V/ b; z! `, e
请求头:
% z/ k) b w3 x7 y https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
# \0 J+ n1 f$ t+ h (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
1 M( b7 e' [) S4. 获取数据
1 i! F& F) w( P' p4 E 文本数据 response.text 获取网页源代码2 m" N. I2 i$ k
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
8 Q6 Z1 h% a1 ? 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
" J% c/ J) j6 u: B* s+ o: p) C5. 解析数据
' \3 q0 c% w, j- l 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 * s( E8 |7 w1 @8 V) ^
6. 保存数据" ], h6 C# c* n4 {! O8 g
1
: E) y; s, p% h$ o: O! r1 n2
* g: N7 q; T7 t' }! J& P39 `; K5 N3 V- E0 y4 V
41 ]( Z# u' \% `+ h2 M4 H2 j2 A
5
$ e) S8 A+ t( l' A; Z6
# Y Z3 s+ A7 |7
! R$ e6 s" b; w4 T8
. D% @' ?. Y2 \; }& e- @1 k8 n$ z9' U; ^. L2 n. r* r O- L
10
3 E6 J1 }+ ]- l+ @- H, c8 B111 q" c1 G# }+ a9 Z' u# w" n8 C/ c
12
& X' d3 z) |9 \8 A4 u137 {0 a5 E @' w$ l
14% H; j+ d- U# K* F' c
15
# o6 R2 j7 N+ }) t7 n16
, I$ l' V2 C4 f6 H, x" P* W5 ~2 @python除了做爬虫数据采集,还可以做什么?6 a' Z! h% V- ]) d
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
$ i1 D! p, L v7 M
7 l# k. Z* p2 a4 H6 b- W$ R5 ~: t
; L& \8 J' ~6 K* o! b/ ^网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
+ t m, U. z, S8 C比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
) P3 s' K5 v+ E# Y我可以做到这样么?
& O/ S! G4 d" L: v0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;7 a. M5 k5 X2 r( v
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
9 }( L3 ~) U& Y/ I9 d& c5 \( \8 k8 `2 n
I; n" ]. e% K# P1 c: R& v
爬虫开发(脚本)(就业/外包) 可见即可爬
% R$ a( w3 n5 h虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
$ f6 e6 D, n2 A( n4 J. ]# W% `很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!! j3 Y( D" t. |! n% Q4 W
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
1 m6 ]4 [5 f1 w* c; S, r: U. v2 J: @, U; X D
! T% @" b/ J& q% Y7 O; U
数据分析(就业/外包)
) L% B% J/ v( b3 N1 f* K) z. e7 K" m4 `$ C3 k- P& ]
* p1 A9 y- A& M0 C自动化(脚本)0 H2 b2 w9 T g* _/ O
$ x; q8 ?7 J6 i2 X; l" ^) h
' O' R9 l# A+ g. U游戏开发/辅助(脚本)
! M0 W4 A2 O4 Z: y& P% ^
5 v) P J2 U- a) d5 u+ _- q- A& ~$ Q$ D/ h( H
人工智能(研究生以上学历 要求很高)
' c6 o1 p. t8 X9 T- l$ f1 i+ _
; H$ q, X% `5 p) h7 v
* X4 b' X6 B+ k4 f3 }3 G4 I% r等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
7 Y8 _" S" ?* P1 ?
6 G2 O4 f- w- F' ^ K% j2 b& z4 d/ n9 m) n4 D
我们开始正题吧
2 v' y5 M* m* Z2 }- r: ?+ [1 K& @& Y0 w
; a/ ?3 A8 E( c0 Y% o% s, m爬虫部分:: L; F) u' Z% B+ d2 @9 F
发送请求 第三方模块 需要pip install requests
0 W$ j b! ]+ h/ i4 O' u9 M( N& p, j
" c+ p$ V4 o8 t2 I+ S2 o! b
import requests% L. }1 {. x6 l4 ~3 a4 h9 D( a
import re # 内置模块* v! Z" f8 J- W: g8 G
; [! r8 Q) S* Z8 R# X. x' g5 q
5 G7 W8 I/ Q* [( ?9 a! b: }
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196') b9 T' S; L" P8 X. `6 R
18 C9 }2 b ?/ \; i# `3 D
2% E7 m* e% N9 t
3
+ Z; X' B' ~& f9 a2 H$ C ~4
& q2 r1 Z7 d m& n# {8 X请求头的作用就是伪装0 `/ \+ s+ X, {6 m$ Q
- Q m# z' Y6 i2 u- J5 i) q6 \( ]+ e! q: E1 _- z M+ r
headers = {2 |' E9 z4 V1 s0 r' N) Z0 k
'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' |7 c. g( R9 f' k
}
3 d" t5 H5 O8 i1
8 S7 C$ u7 X: [2 E0 [' R0 s2 T9 a) t; X8 N. I* C) x6 k q
3
- j, ?- N4 G' ~1 Q E模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
# v2 r) B$ \' \5 c; M函数传参# E% W1 W1 Z* P; |% l
: q4 B) l4 n# \
& e6 J: I+ M5 d% q0 C4 d( r/ T# yresponse = requests.get(url=url, headers=headers)# M+ c% r$ P6 u/ n5 v3 i' t5 w
1
6 G4 P% B' b# k<> 对象 对象意味着你可以调用里面的方法或者属性2 d) f6 g( d- y
200 状态码 请求成功" }9 o& E; P* t# i p% Z0 b- t
获取数据 文本数据
! {' \; u6 c9 N$ w自动识别编码9 e6 J* U. Q* _0 e; Y8 [- k, y
& Q- b* {' g% o6 Y& m' g9 _ v+ T) R: g) m
response.encoding = response.apparent_encoding& M$ c9 X$ V4 ]/ {7 T& B8 y
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)% y' {; C# Q4 D) K+ `
1
9 v5 Q3 w4 Y" ^( Z23 F- ?* a( g6 K# H& g
content_str = ‘\n’.join(html_data)0 O# [- d/ O7 ?# W0 @! D
6 Q( y2 l" K+ t; `/ q. Y
6 l* X4 j- h8 q! O2 c7 g
要列表转成字符串 ‘’.join()$ _" u8 C( w/ M) y$ j' ?! O, d( I
for 遍历
4 H$ P$ {9 s: q# A; U2 G保存数据 保存字符串& O" C2 Q2 y1 M" \3 Q, N# F
for content in html_data:
* ~- L0 H* _" p! o8 {# s9 @ # mode 保存方式 w 写入会覆盖 a 追加写入7 |9 p9 i$ r4 u. ~% W, W
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
1 R+ _5 I5 T6 V) X' S8 m9 m f.write(content)) A) q, `0 f3 s. `: z: M7 B, i" O+ B
f.write('\n')' f$ H+ c- x8 |2 I. a5 `4 @. u
. t. N% E8 W+ j) B8 r9 e& D
, m' Y7 C; O* v- M0 L8 j5 k# print(content_str)
4 W$ p5 d& @* J8 Y; W5 I1 F3 ]4 O# k0 V! @& f7 K3 |3 ?
2. k) U! ^9 k" r8 x' w% G+ s
3
7 b6 d" l$ L# z2 C' H% G4
0 z+ ?6 |' s; D$ C$ m- o9 D58 r6 @# `& j+ x O, r) o1 X; k: N
6
1 }& h: z& e* J; O6 r5 ~7
" M# j5 l, X, k, _% w1 B" C& f爬取结果$ M* g+ _5 d: ]+ a6 ?" E. i! Q' c
0 V, p5 z* |* m' W5 F
4 q; W" q6 R9 g1 a
( D6 }2 A2 D1 J% @+ u
+ u# z' X2 F; m2 g" y然后我们再来实现制作词云图部分
$ c x; g. L* `+ ^) t' ~: L% H9 S' h a8 Z6 g2 p4 I M6 Q
" L! v! r4 u6 A3 I: y+ N6 ~) V首先要安装这两个模块
8 h5 l1 Z: \* d( b$ K# e
4 ~# p4 f7 w8 e/ ~7 n! B* c! V# L7 p% n8 d F3 G1 S8 t _- I
import jieba$ r a {3 O, L. ?
import wordcloud* ?" e+ x( A+ _( f6 x4 z
1
- {' J( {" [) Y q3 ~2& O- U: I% O( L5 C+ f/ y
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
* Q; e" g. V4 H0 I7 {
H. ~% ?: [; |7 k" f- ^6 q% ]" g
f = open('弹幕.txt', mode='r', encoding='utf-8')- W+ c- J0 x# h: w. R6 |
text = f.read()
, B% E) ?4 ]( c6 [) p7 T9 rtxt_list = jieba.lcut(text)
# L: [# L6 o, \2 l# print(txt_list)3 }# ^: j8 h' T( Y& v$ I
1
1 t5 u9 }) s' f! ^5 W: {; n# P4 I2, B) G0 P! F5 M" H
32 U1 Z* U# X9 W4 d/ k; K4 h; |1 p
4
' m8 i5 Y0 m. @列表整合成一个字符串6 l3 g' R/ n: [, K* Y
3 t# V; `% z. E
0 j' o+ S- r9 K& N4 u. B; n
string = ' '.join(txt_list); L; m' n0 |4 O! G, L& y
print(string)2 H: b( M' b) V# A0 {+ C* C
print('---'*50)" |# k6 S$ h, a, R: i
print(str(txt_list))# `: H* R7 [( |( D" X( n) `( y
1& n: h. \1 e1 x$ {) V, k
2
u' R0 |' Y4 d9 F0 ^3 Z3
6 U: G; O8 f2 M4
. M/ v7 s) J" W词云图设置
) _% I; ?2 o4 {5 i3 r# L* G7 r0 l" @1 T$ u
! i) d: N4 h9 y* }
wc = wordcloud.WordCloud(; S3 ^9 ^4 d/ H1 p5 \4 }
width=1000, # 图片的宽$ p( N' i8 L/ a9 r( W: C8 ?
height=700, # 图片的高
( S/ ?5 i0 M( _" d! M0 d# ? background_color='white', # 图片背景颜色" @. H& z, [/ W( i( x' e$ o
font_path='msyh.ttc', # 词云字体
" I$ A* ?; l; H# L/ N S # mask=py, # 所使用的词云图片2 B; z; h$ t% M7 T0 o/ O( u
scale=15,! W/ e( ?9 q$ w j
# stopwords={words}, # 停用词, A( J) | Z$ M! k/ y
# contour_width=5,! n' J5 s ^# f. m" W2 T
# contour_color='red' # 轮廓颜色" e6 @8 y0 d5 C% F4 Z- N$ B8 o0 P
)
5 V4 H" j! |/ ?# ?+ i' G9 D) ?1: H' d/ J/ t6 n
2
" p3 o( c3 b1 J4 f/ b) n30 W! _" Z T$ }0 ~2 P- i
4
( \9 U3 w9 K$ Q1 p55 V3 U+ m [& x* W2 h) A! {# `
6$ @+ x. t& L4 ]4 I
70 D8 b O5 {2 x2 B# Q3 I1 Y4 W: |; f" K) l
8, j4 U7 X6 o4 G4 N3 N8 b: y' _
9
; a$ N( J; Q' E Q" s7 a10
9 C& v* j( E$ `+ J* J% D11
9 ~- z, S- a+ U5 y8 P5 u给词云输入文字/ p/ K& U+ q; Y9 k% j% q9 M9 i ?
& O2 [" v2 `2 ~7 q% W* C7 I/ a# K
4 I) ~% \) d0 ^' J! f! T5 o4 [
wc.generate(string)
7 N" A3 E, F* e! i w1' p1 K* e4 b& ^4 R: |
词云图保存图片地址
' K0 S. [6 Q7 y% Z/ |' }
$ Y N8 A3 ~% `4 @ w# x# i
9 N* }0 `+ y0 K. S% L: [2 l2 Uwc.to_file('output1.png')
# {6 V2 _6 u( x9 n4 I9 ?+ ?1
; \2 V& j1 @) W; X9 @9 H词云图的过程中有点慢,大家不要心急
- r& e; m- P; l5 o. b2 H& m" _6 t1 Z( X! q: G4 o; \; |
3 @+ B; [* a2 N. V' r: D* ]: p
这是最后的结果: O: U0 J4 u2 O) l$ M: l
! G) v( F# v& C/ g- Q$ a4 e( j& l) R* u% ?* U; o
没有加停用词,所以一些无用的词比较多5 d$ ?, k+ C' t$ z& X7 K; l
5 v) w2 G& H5 C3 V2 w, X9 @3 @
. l$ j# D$ c, i! u% w# dstopwords={'了', '啊'}
# C% I0 A% z2 q% z5 Y& f1
$ C6 g% ]$ k% z* J- C把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
. b6 f+ z) C4 ~1 T6 h: v我们再来看下/ \- h- ]+ M. y' x7 f% [- e' g+ j
" z0 s0 E6 P" C7 y2 |' F9 ` y% l: ~$ m. Y
不知名网友:666666 牛批 老哥我要学!!!8 {3 m) C* E; t/ h9 m$ P+ [# ?7 r! C
: R7 M3 z2 v0 r& w2 A
8 P* u' V: k b! k3 T* l+ c( B/ R4 k* s$ y6 u1 d' [
" {0 b) F" ^& e/ E7 n
————————————————
2 R3 D8 G! f% Q0 Q6 M- F3 d版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ w- K& C3 Y8 b
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 [" V5 D, m* O! g1 }0 x
9 G) F8 J+ Q0 R/ n1 w
: r. W1 h0 `; {) Z4 i4 g9 N
|
zan
|