- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565671 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174924
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
4 ~; |0 G+ Y* e" {9 B* W
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!* f+ u% @/ e0 d/ m- J! v7 a
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
2 p( {; \% B& X4 _康康大家都怎么说!1 ]* p. U* f) e4 U
1 K, H/ D# Z0 Z- G3 C) h
9 a: C/ g) d( l8 Q% H' W* `" z2 P: e: s; I% U3 h
7 v* x6 u+ }' m( Z" [
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
$ i4 [# f9 V \$ K
* M) Y' o3 s q4 C! j* |3 C& T, v/ Q8 m! _7 B" M
如何安装模块:
/ E& \& M. @6 A5 i" h: T5 u5 q R; |
' X7 J1 b+ o% R) P8 h* Rwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车) [3 y5 M& j/ K& K- |
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车 m3 A% z5 Y5 |
如果模块安装失败了,可能是这些问题:8 `7 o$ x, t7 D# D! K2 j
8 ~5 O% U% \5 [; u& A9 g; v+ n
. M! A- g1 T( U! e& n/ |1 C
提示:pip 不是内部命令
3 h# O) _( E" J3 E& \9 g你python环境变量可能没有设置好
5 j7 t/ d- ?/ R0 r3 K有安装进度条显示,但是安装到一半出现报错了; O+ }* `# |- A/ @0 r
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
" D& l& y! h! x2 o; c$ Z( l/ xread time out 网络连接超时 你可以切换为国内的镜像源; U3 |# S% r: ?& A7 G/ j8 V- g
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
; `6 F0 m s6 D你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
* E* c* t4 q8 V( o1 F4 ]2 e4 Z可能安装了多个python版本; W3 S0 C1 e; j4 M# {
安装一个版本即可$ F) } @" J {( g/ w- Q
Python做爬虫到底可以做些什么呢?& Z ^; k! z! Y1 j4 r2 O; b3 h
+ W* f/ h- O- K4 H3 F5 q& j7 U& C+ y8 ^4 |9 Z
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
( b$ ]( c* k- K$ t) }) E/ }& o12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
% x0 E0 P6 D9 H: A可以刷课 可以刷网课 自动 还能自动批量注册账号 O2 o1 v7 N3 a0 d) W/ Q2 K. ^
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
. s0 L+ |/ U3 `3 R) K4 T1 k. v! h普通B站视频可以爬 番剧是需要会员的6 M. S$ m6 v$ l4 Z1 d# ~
i# Y* a2 I7 P& o- D9 N" N7 V9 M' S! d) }9 b' F
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)9 ?# g4 S+ C: a+ w, {
4 P. c/ b) s: ?: }( ~9 b
# p+ y7 D% k2 p0 m9 Y: W7 G1. 确定目标需求 (弹幕数据 那个视频弹幕)
: ]) O9 x2 i( Z: s/ L1 Z6 S 确定了
( g A+ x7 m0 L. i1 e8 e4 H2. 找数据 (数据的来源分析)
0 \; b h' U# T' f {0 G9 I 简简单单 找到了
, F! }- K) B1 X* m- @: s3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头); Q5 s1 s% X3 Z/ o. ?* E: c
请求方式: get / post
/ E3 R- D {' P% h0 _ 请求头:
1 } e7 h8 Y9 _& F" @5 k! |) U S; x https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
+ [8 C) {$ C4 z2 `2 c- K( e8 m (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)6 u9 F: u* u5 j$ x
4. 获取数据 . E1 [) X) S$ n2 V4 M
文本数据 response.text 获取网页源代码
; r% J) b' R% F" p6 r% H3 l) \ json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多' X4 X9 Q) t: |' X
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
# U: V E) k! [% K6 F2 ~* b5. 解析数据 v. J) C/ E0 B) d
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 - N8 c0 c$ c% ?$ Q( R; f
6. 保存数据$ z4 A: n5 b) p
1
$ [0 e9 ]9 C. U7 C+ J' @) d$ j& z2& M+ d7 Z! C2 {* m# x
3
0 s D, O. ^4 b- V44 I- P1 p; Z& J( ?/ J" e4 x" T
5
; Y1 V/ j3 X; P2 D& J/ u60 O% J& `7 n/ s: k- N
7: ?; ~0 z. ~5 w9 ~) s8 D( h
8
, v' O9 ~' l3 `# i& h2 i9
! X. i6 [) Q% Y3 F( s10
" [1 O2 }/ P( f p- T11
, k. H* N/ l- @1 t/ }12
% } d- `* N& w8 K13 S! X' b$ r9 G
14 N" P: x! V4 z$ b$ d
150 h3 \) S& j; m" S; {0 P: ?
164 P% h; T) K( J/ \( @
python除了做爬虫数据采集,还可以做什么?/ W9 J6 D4 T5 \& x( Y+ |
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
: x i+ v8 ]: Q. `# n. K. t
7 N- e U" I/ x4 o. N8 M/ Q$ J' P' n( g. C" }4 W4 N
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
8 r8 v# b' V- v. u9 |比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
4 x; c/ n0 h4 y( l我可以做到这样么?
5 b" d: \, D A# Z9 ?& t0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
4 F: ~ v- x% J/ z如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
4 ? f# h& v; J4 E
6 S2 P9 X' [2 H7 G2 ^" G) V
" `$ s& t3 l/ {- M5 e爬虫开发(脚本)(就业/外包) 可见即可爬& w6 M+ e0 J C. g5 N8 V8 l3 _
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!; p2 P1 C9 m$ o' k1 ^
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
" C3 M5 G- i& [! v% J1 O0 l之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!9 X% h6 A; i \
7 d6 S- M0 I+ U$ [" ]* X2 T9 w! l, \$ ~
数据分析(就业/外包)
7 M4 E1 `% Q- ~1 u ]8 J7 W7 A; |- _/ e. W+ a/ h6 ^
7 W% X; X% p- R% q& a
自动化(脚本): Z9 V2 [9 p! x4 d4 H- Y+ V8 m. e
7 T3 T8 v* d( e( u& P X
- m& o0 X3 G. o: l l+ y游戏开发/辅助(脚本)
% z+ Y7 W+ t, [ u+ G* g- c& f% q8 g" w8 L1 ]
! _# e1 D' ]/ g) @9 s h人工智能(研究生以上学历 要求很高)( v4 a+ c5 W# s1 g& v
- {# O: N- f( D# J! I- K# g( [+ l3 c4 k7 p) u
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
$ _% L+ f, S! M: R0 ~( j/ O. ?, d) D* N/ Y
. ], J% J7 m7 |" y我们开始正题吧
M7 W2 X+ }- _; w0 i
1 o( `. \6 k, I6 E/ U) W+ X b. s2 {! Q9 G) [5 v* C, q6 @
爬虫部分:" H. g) z7 w( I: s* L
发送请求 第三方模块 需要pip install requests9 u0 z+ s, E! e! s. c
3 x* ^ J- I4 Y( g _' U
6 W6 y$ w5 [9 W ?import requests
/ {& a3 p" D8 U+ rimport re # 内置模块
) ?7 X2 ?0 N& ^
3 o7 K3 K. P' Z. l& C5 a w$ ?' M( Q( D% [
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& [5 H- t6 ^. H* X
1+ B; n0 ?/ q6 ^$ m
2
, r; z% s! m" m% F& _31 d+ z* p$ D9 W8 R% Y7 z( c! D
41 a, `' W/ i# A8 |/ V
请求头的作用就是伪装 h( e9 |; i% y5 y1 p T
6 g2 Q) g: R! S7 Y2 [9 _, h9 [+ ?. K
headers = {
, g* n2 @) V% s/ b5 V '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'
; {2 v$ \6 l/ f: i* c5 |1 G& O}. S# ~; V8 K; a$ i9 F2 x4 r, p
1& h/ J, v0 G8 y q
2
5 }% g: }4 h6 Q( }3* G" L( j1 j# {7 _% |& q u
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
& |, X, ?. o5 Q- F函数传参
. _/ z, x) }/ D/ ~6 [7 i3 d1 r/ o0 O1 C
8 T+ F' s4 `; K R5 `2 e3 X3 Vresponse = requests.get(url=url, headers=headers); i! e- G, @# i8 Y
1" @6 M0 _! k( e0 N1 @0 J$ _
<> 对象 对象意味着你可以调用里面的方法或者属性* i `* e5 `% H
200 状态码 请求成功- Y$ a& x5 l3 ?& ?+ M/ C
获取数据 文本数据
9 N4 r0 A4 e8 Z5 h, @1 `) P( J自动识别编码
" o9 z* w$ Z) G
/ j- p1 _; @: M1 q* `, L$ r6 F9 t, j6 O& l8 F7 A6 y1 \
response.encoding = response.apparent_encoding
$ D% z! \- P8 n: x$ f' Lhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
/ Y+ r, b+ }% m5 [: \" V6 l1
' n1 x T0 e# s/ _2
0 ?# i% }/ F* {% c1 D2 Hcontent_str = ‘\n’.join(html_data)& d8 W3 E4 S% m5 Q, C) |. }( W" s' z
; }/ P L- |8 Q2 l; j, r9 J: D5 q8 q6 x/ e$ j8 w
要列表转成字符串 ‘’.join()* |1 j" S: Z" o$ p
for 遍历7 y" D) j( a' P7 B4 s$ O, ?
保存数据 保存字符串" M& ~5 t" p: E( z
for content in html_data:
7 g; |+ V$ O# H/ I' J: c: m # mode 保存方式 w 写入会覆盖 a 追加写入
1 f: V4 O. @+ d with open('弹幕1.txt', mode='a', encoding='utf-8') as f:5 J3 x! H2 Y5 h' W" _" O
f.write(content)
# ^- z$ x" |0 i ? s f.write('\n')- Z0 Z1 A2 f( o) c* {% o
, Z8 m: l" Y& Z* F# r6 e
) n( {3 S( p5 S( B1 ^4 g
# print(content_str)
" S4 \1 l( l* H4 R" L1' x3 `' f$ Z s$ f1 R+ ~6 z2 ]6 H
2
% ]( s0 a% G/ n0 _9 S37 a( T5 b3 f. X9 `% T$ Y1 Y. z3 X# Z
4! ^- c2 Q) P% E( q
5& m c2 n U8 g& @
6
1 U% ?* ?0 Y* A5 }/ U! d5 S7
# W8 k2 X5 U) V3 ~爬取结果6 O; f) J# F. {
( ^3 P) u& E% H/ {2 N% q3 v7 L, ~0 f" J. ~ k
# h) C0 D2 D9 h- r0 Z4 f3 z4 G; t# H2 W; x
! ~, z+ z4 d$ u$ N) B8 S& a
然后我们再来实现制作词云图部分0 k& i6 F9 ^9 P* {, }4 K
# @ i7 }- f5 T$ y
) e8 g, E# x/ p- x首先要安装这两个模块
/ n3 Y0 h% `5 A4 K7 P; ]) F- }0 n: z+ X! x
5 U! ?, ?5 Z( B2 ?+ K
import jieba& @: n& L/ ]# M) m0 @/ k
import wordcloud" Z5 }7 S0 r& w
1: B0 y, {$ u9 b0 h4 T
2' G7 k0 A; Q- y' u' S
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
# e! m' N" a6 i; n& s, {
: @" _) X3 `# Y( f, c# j7 a5 q4 ]. R7 t) _3 Z' a1 B
f = open('弹幕.txt', mode='r', encoding='utf-8')9 b+ w# B6 T( {0 ?4 F0 q* _8 l
text = f.read(). q! F, j3 V& J% v2 T. Q3 k8 @
txt_list = jieba.lcut(text)
1 u `4 j% _0 i5 A; j) ?# print(txt_list)8 h. w5 E1 x* H. A, m
1' q q. f$ G* |; P% L- }6 p: q3 p$ A
2% K+ A) T% U$ v4 g9 R& N3 P
35 E' C" s$ S/ T% ^! f
4, T3 W9 Y1 t. o8 M/ Q3 S
列表整合成一个字符串* r" J5 D% O& T: x2 S
( J2 R7 V9 ?0 w2 }+ f% M2 ^0 M' K0 b3 }
string = ' '.join(txt_list)( |+ Y {- [" Y
print(string)1 T1 O+ N, I* D( p3 J
print('---'*50)4 u a b) ]! A& G4 s3 d) Q
print(str(txt_list))+ K' ~% R" J, @7 A
1
% o4 w3 S0 l! G3 Q: j2
# t6 q; b( b% R3' w% W1 r) k3 y S) y
4
& [! h& T4 x- | j2 N; a词云图设置9 Y9 n0 J& n4 r/ S! `
d% b5 {) X' L3 y
4 E: f4 B" V' a5 I! \" M& vwc = wordcloud.WordCloud(1 m; l. x5 {% m. P7 l
width=1000, # 图片的宽- ?6 Y0 a: H0 v# Y% J9 X t F
height=700, # 图片的高% i- F1 T/ ?7 I* Q [( E2 {
background_color='white', # 图片背景颜色
* r @- S2 W! O4 {* S9 |7 g1 @ font_path='msyh.ttc', # 词云字体! X4 O0 r( W+ B: F+ T
# mask=py, # 所使用的词云图片 S- a. S8 g$ {% W# |. z: f
scale=15,, F# \; r% c7 N% R: J
# stopwords={words}, # 停用词
6 z9 h% L8 M) [4 Z* ~# ]) {- Y# i0 ] # contour_width=5,/ H( D# o4 ]6 {+ w) Z1 `; x9 h: s
# contour_color='red' # 轮廓颜色% p7 b$ o7 L" `% l% \
)
- |, u* |! q, J3 H- T' S* x/ S1
: y" L0 G5 C; D7 W2; @( U1 C4 X5 C! }- d4 y( C+ \ o* b
39 B4 {. T8 n$ @ c9 j2 G
4: s6 }1 p1 J) u6 V& n
54 t) j$ L0 x! @0 L, Y4 P
6
" f2 s+ ^) s- D' S1 B7
, L0 H3 t. w8 l3 N) ?83 V+ e; H' r2 {" v
9
6 u4 C& J5 R1 x10, m* l1 m9 z7 @/ y* B$ w
11! l1 M. D- T) @9 |+ d
给词云输入文字" j( F2 ^7 [& E8 g! Y! ]' Z1 `
, k( ~0 L6 a. |+ A; F7 ]
" J, K+ I$ U" a; W9 `. |8 C
wc.generate(string)
7 }/ k/ }! G1 O! _7 t6 |* y1
! O& C3 j. E ], M% D# k3 [词云图保存图片地址- e, }+ ]/ T' ^& d
# ^/ q& h# T$ D* j9 O! k* C
4 F* P& g) l" _& {% X0 K
wc.to_file('output1.png'); ?: i9 k. Y6 T' m( \
19 R4 G0 J* E8 z+ {. o1 b! _
词云图的过程中有点慢,大家不要心急2 k! P& Z9 |1 H% j( L
7 f0 p, z @) ^! y0 L- G: T2 r1 }3 w G1 q5 P( ~6 I
这是最后的结果
1 }( l3 H$ n( L( P8 l$ \" b. g- ?8 D
9 N2 c* x5 F- X, ?3 I5 w4 Z
没有加停用词,所以一些无用的词比较多
' w5 n' H% p, m& u @4 Z$ A+ i. X2 o8 K; n* B
' T7 W! A6 n: m- `& u
stopwords={'了', '啊'}
4 h/ v/ e7 M( r- j1
7 t: ]0 U% P6 R$ b& ^把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。' O9 r, l3 w" s/ W! I; b- p) ], P
我们再来看下9 A0 Y: a# E0 y8 S3 l
X% G/ Y8 j9 m9 e( W# X0 n
4 H( R: S% t( E$ ^4 A/ C7 O不知名网友:666666 牛批 老哥我要学!!!
1 x% y; K5 w# ?; O. h, W1 l" `
4 F) H* r$ _' n3 C9 s" D+ l) k' s; d. n( A$ b& y* D# U; X
w2 v% `1 ?- I# X) A, z& e/ _+ o: n' P) c6 P( ^5 ]1 d
————————————————9 i. d+ A# m/ T: _' i! P
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 U# \' }' s" y' S( v8 k, Z
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
: U: {# Y5 h/ |0 Z& c5 J7 y3 L& B- g; M- A# K' C
! f6 b8 ]* k' S0 a1 t5 Q
|
zan
|