- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 568666 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175823
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& a& t( }% [5 A$ R d用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
. U) E; H0 L/ {" c% Q今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!! v1 v. R6 h, }/ T
康康大家都怎么说!
+ p" b0 F/ q; ]/ [3 I& B, ?8 w, a0 a0 K
+ d: u; ?0 D: S P6 p
2 ?0 Z7 _0 W5 Y
: I3 R5 ~: r5 Q% C6 C) K
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
0 I+ S1 g* S* @1 g' f
: a$ J! {& l4 V$ B& e( F
1 m5 p- f- p4 d* t如何安装模块:
9 { c$ w, w. L! p8 {) R' C1 c
0 Y' {% f! F+ p: i. Z; u1 b( m& K! n4 v% K. O% A3 z
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车: G: k+ B+ E Z4 b
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车3 A- y/ Q2 s& v v
如果模块安装失败了,可能是这些问题:5 m/ g# V4 c+ O4 G" e8 r2 D2 m
4 W7 ]) F! u" }' |4 s- O1 r; n
) E# Q9 x& H7 [3 D提示:pip 不是内部命令
* y3 |# A5 D! W) I* ~8 y/ i' e3 K你python环境变量可能没有设置好
2 f2 G% \) {* g& {9 x有安装进度条显示,但是安装到一半出现报错了! B& n! ^) R/ K" w# R% ^
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB* A6 c/ c2 G3 w! i
read time out 网络连接超时 你可以切换为国内的镜像源, }3 K F9 R9 v; u& I: k3 C' G
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块% `. a- `: W9 b3 W( C
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
# k! W4 M/ h2 J* L可能安装了多个python版本
3 i- H5 W: @( E2 x安装一个版本即可
# C. h( W: J& OPython做爬虫到底可以做些什么呢?, {9 H, e, \7 |4 Q: E9 q
) @$ \" z$ w" ~8 L3 h$ _+ ~* i: L% z5 l
/ `2 S' {) J8 D: F5 e/ [常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…+ p7 R- f+ o; }, F1 F
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量- m" \+ d! ?+ a: g
可以刷课 可以刷网课 自动 还能自动批量注册账号7 H9 a1 x. Y' b4 x) h( [
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …. s! F- h; b, o: U6 ]0 T1 O" a# o0 |" `
普通B站视频可以爬 番剧是需要会员的
/ |- |+ B' u6 h! k# q+ r7 D
) R3 l* `1 u4 X. D1 t9 R
- X8 Z' d- W* H4 x7 [8 J爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
0 g- X# O) ]7 x1 w E9 z% U0 {
8 x9 X4 z3 c$ R
7 R# O! O& v6 a1. 确定目标需求 (弹幕数据 那个视频弹幕)" M7 o! O3 r( W% @
确定了
7 @8 w; ]) I# H# J: o3 q$ ^- w2. 找数据 (数据的来源分析)
$ t! I/ n, d! p2 D0 P 简简单单 找到了
% [! p* [1 j* Y2 l3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)" u% M A1 N/ F- O9 Y
请求方式: get / post) p+ V8 y# H- p" P
请求头:
& c5 h& r( c+ | https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
" t* n9 s0 ]; P9 H4 x! X. ~( k7 U) B (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
% S9 R2 W1 m+ V+ s% e/ M4. 获取数据
6 S0 K6 g* C, Q! j. W: D' O! S5 x 文本数据 response.text 获取网页源代码
: [$ c. o l5 U) b0 m json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多; d8 J3 N& l, ^6 c
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
! @6 f2 ^& O) E6 B0 K5. 解析数据
* v5 _" i$ }$ ^1 k6 {' G 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 6 }$ I! D( I. e1 `$ ?
6. 保存数据
' G9 D' i# b6 q$ ~* m+ U( ?2 m1
$ W# G( b/ E1 S1 O6 c) ^5 H2
+ t; P7 k; R/ q9 h! ]7 h3
$ w1 J+ @7 [& n+ q4
- `$ Z* [& O( C y50 c9 K% ^4 {: h! v/ Y2 o
6
6 [# ]# E( a, |& P1 |7& }% c( E# R+ @; q
8- m0 l Q- ` j2 g* k
92 | u4 e H& k3 C
10
2 e2 F- M' a% r/ s$ E- Y: ^, Y11
' G4 Z0 @; H s" y. S12( g& n: `2 E4 M% y0 n. g
13
* J. I! U: O( P145 M `+ V* h2 N# h7 l! C
15+ ?+ `! U, f6 c3 M$ O) r
16
% r% b& p w7 _. q3 ?python除了做爬虫数据采集,还可以做什么?
, T# J9 H4 ^& z, }+ }% d8 |0 p兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
3 R5 X) C. c& m7 u- v# V2 {4 P% d; m& l: T, h- U
& e( A% N" j: Y网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K" i* x- f. i3 M5 ^0 x/ ?
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
% `: h$ F+ h5 _% D1 S我可以做到这样么?0 g: k, Z* _/ J
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;- B6 @% p) s$ N; a" p8 k
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;0 B2 @) B7 Y: a2 [* C( X- Z3 w3 b
) t" ^ {. o- A
: p1 t% C4 b/ r; X; B" n爬虫开发(脚本)(就业/外包) 可见即可爬
, v3 Q' F. x7 p1 U( P2 ^* S( Q( {虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!0 J: O; n: v, G% s2 z0 A
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
8 f/ ~0 @+ P; N9 w之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
" V7 t! W m8 g" O( q4 U& W$ `. p0 d8 H" ?; ]& w( i
+ q2 I+ l4 D# H \数据分析(就业/外包): ?' Z) E- r: \8 j1 L: }
/ |$ A3 ?9 m! A
: Y, \: w. c n, v
自动化(脚本)
5 A5 W- @( j! K- Z) J8 R6 U$ B1 c. g8 U
0 ^& P2 ]8 B E. N& X7 p$ a
游戏开发/辅助(脚本)
0 g# x8 {; |" r" w; g1 O8 m# @0 a" x9 U) N2 Z
( B9 V" u$ N) f* k, ^
人工智能(研究生以上学历 要求很高)
8 h) T; f: M8 W$ Q) E% R$ u. D) n7 d* c D3 b P' J0 ^
x# Z" ^" V& p, O+ J! h等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
$ r& R/ n9 C" I7 M+ w) o6 {) V$ C* G+ X! Q% |8 I; H4 w
6 n3 W; `& s! D" z% T我们开始正题吧
+ v0 i& H4 {6 u
5 l* |0 j- f, y
& V" O5 _% T, i/ c. I爬虫部分:- n1 ?) a4 }6 J& A' h1 m& O0 A7 w/ }
发送请求 第三方模块 需要pip install requests
' u8 Q' V% l) w, T6 Q& r: E' y4 B5 X- H* `: _7 e' d" A
0 F. ~. }. z X* gimport requests
& T$ k& e6 a" @2 ~" \import re # 内置模块
% Y) e5 s3 Y1 F) E0 _
* [9 F6 |# Q! I5 E: p- z
7 x1 h- T* N( h. ]url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'' O b2 u' ]5 r4 P* `# l6 j# u1 d
16 r/ v M `* i2 I0 X5 a- c
2' v3 B1 l* }8 I; Y1 u. b& F
3
- E9 y& b3 j. F+ d" A* O# q46 v4 y# o/ m* l; D2 |
请求头的作用就是伪装
4 p! V) }: V, n9 D- A/ O1 y6 C' s. g1 k3 Q, L8 I$ n9 `, W1 e& R" W7 L
/ M/ Q4 y: R g( N0 Xheaders = {' t* n( {7 {9 y3 ^$ r& j6 Q
'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'" w* G, m4 A* D; U( I" k" r
}5 J7 B* u' d$ W2 C+ i/ H% A0 f
1& n, B' j$ a* B U% K
2
$ _9 D$ g) K& X9 j: E7 A, ?. |37 X& Z! N5 ?* s' I
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据! X2 J* H9 {8 l$ N, }
函数传参
+ T0 D$ b9 V. z. l' y6 l' H+ D
: m0 U3 _$ {+ O8 z5 E p
1 i6 e( E1 |3 k* o8 aresponse = requests.get(url=url, headers=headers)
6 ]; O4 N& V+ R% [3 D5 W1) g b+ L1 q u; n! [, \
<> 对象 对象意味着你可以调用里面的方法或者属性7 q& O4 c) Q& Z' o5 W2 F
200 状态码 请求成功
5 w5 o1 ?0 X5 b6 Y8 M# u) |6 Y获取数据 文本数据8 Z: Q5 V1 @* i! z" r3 c
自动识别编码
! H# ^( w% ]+ n
7 V" d( I0 L( ?$ N4 Y* W7 {* M6 ^' w, P
response.encoding = response.apparent_encoding
% T7 W! d3 W& e/ m7 n7 mhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)+ D7 F2 K$ F3 q: _/ q
1
6 w. s& R0 P1 s1 {2
9 Q0 d9 V4 V X5 ?( _content_str = ‘\n’.join(html_data)* U8 k! [3 k, D" E; H( q
* Q, b( S/ ?8 I- K/ z% ~% |
, n2 U* x7 i/ f( `6 [4 P* d要列表转成字符串 ‘’.join()
5 i6 u3 N$ N: l3 K* Yfor 遍历7 ~" H" g) S# I9 f
保存数据 保存字符串
' @, \; U0 e# i6 z! s# xfor content in html_data:9 F' Q4 K4 ^9 V& h; r7 z1 C
# mode 保存方式 w 写入会覆盖 a 追加写入) j* ^( H7 |: G- P3 y$ w
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:- e0 |6 W& a8 G
f.write(content)
$ M! M' {8 x: a& E f.write('\n')
( s Z3 N; m/ |6 S. x4 P' ? A' \ P& x% P' n5 N
& g8 Y4 e) r U% |# c/ u# print(content_str)
. h. F1 F4 M( R1# ~) k) X! R5 _8 `1 r5 ^
2* X, O" e' @ ?( P" `
30 P1 T* }5 n4 i( I2 W
47 E6 z- m/ m- i' j/ C L- i7 [
5
& @( a2 p/ h$ q3 M- g6
) D5 m0 M1 O9 M# g3 N7
& W3 k3 ^7 j; w2 ]7 P# V爬取结果
: v( q! h5 O, M0 j" q P& M/ E% L. v+ V% _3 Z! O' v( N0 L
+ `1 q% p( R1 _9 }% [
9 k. t* C* K, U1 X: W
- x" b G8 d. m- H7 N1 Z然后我们再来实现制作词云图部分2 l% m. k) a7 [' B9 X$ R3 O
2 ^ [/ k/ H& y2 y9 b9 |
s. z6 ]6 E% M1 h$ O首先要安装这两个模块/ l: q$ v% @5 z
/ R5 |' `6 h$ o- r$ E/ V) F9 b6 ~7 z( f- x* k
import jieba
2 P3 M7 h$ M9 S/ W N9 }; ]import wordcloud# Z6 }8 \$ w$ M
1
% ] h( p: ]$ v% [& f: Y/ @2- ~! [1 ]* j, l/ j! \, @
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。" ?% Q8 H0 O2 l8 A& W
# G9 p0 q# ?' _9 h
( ~8 k' A: B3 V6 J& Sf = open('弹幕.txt', mode='r', encoding='utf-8')8 o. @& P, I2 l
text = f.read()4 h g5 d4 k8 g2 k: I, L
txt_list = jieba.lcut(text)
$ I* @% z( B) f- d$ S3 I# print(txt_list); u7 }3 q* v9 g8 E
1
! r* ?; j4 q; Z+ X& L2 X4 I* d8 ?( q
3
' Z2 X$ X' |/ X4, `, v$ t. x8 A% t
列表整合成一个字符串; Q `$ n) d: A
& f+ _" @1 W0 I0 K2 q
4 S9 o! Y ^) S1 o1 J' v( \- y+ G
string = ' '.join(txt_list)
( h8 _+ U! L! G- s0 n0 a$ J: m2 cprint(string)4 I8 \1 C/ \: ^( j/ ]' [
print('---'*50)4 k- d! \/ e s! J( R. K
print(str(txt_list))
5 Z: c2 R1 z& v) |" _7 N& Z; D+ Y1
% \! C4 ~# E' u/ y% T4 B$ s& \2
4 p& P7 n& ^+ ^& \) Q. P35 u8 j$ G, `1 y. L/ p) \2 B% Z
44 H1 c. k, n+ ~; L$ v: _, c f/ t& h
词云图设置
2 q6 U5 V, s" Z: B( I2 N; j+ q& h: ]* c! [. K; \$ F; K+ L, b
+ v1 o) {/ I6 ^8 {3 l2 @
wc = wordcloud.WordCloud(
~: p, V5 U4 k width=1000, # 图片的宽% L/ p% F0 U5 U# L$ m
height=700, # 图片的高
8 f% K8 W/ I" T/ X( r background_color='white', # 图片背景颜色
9 x9 @+ } A+ o1 A3 i0 ~+ p font_path='msyh.ttc', # 词云字体8 N, b/ z. }8 J+ g* a
# mask=py, # 所使用的词云图片
4 R. Y. d! l# v scale=15,
6 O# X+ }; y% v* p # stopwords={words}, # 停用词
- Q$ t: S1 j* |% }' @ # contour_width=5,
3 t3 ^9 K3 b1 @" `5 T( a # contour_color='red' # 轮廓颜色# X1 Z* H8 @2 w- [4 R+ M1 w2 |
)8 H M4 T6 ?7 I5 }# g3 M: G! w$ R
1# E% e2 G3 a+ T& s
2
8 ]6 M9 P; T" W5 q' @: I- t+ d3
# x" d- P* a% F" O% B% R3 W3 u48 b/ G4 G- I. ]. P6 u8 P$ p
55 e$ Z. o1 |- Y: F( [4 }
6" j: W$ y( n( B7 A/ c
7& u% ^: ]# J8 \; F
8( k" Q! x$ u; r) }5 d
93 V0 I. |! o9 P. R
108 P& \) n# q/ k3 ^& H; s/ v
11
+ M/ @& A J4 {' h0 M给词云输入文字
5 f7 `$ | p2 l) e) H! l2 C0 L8 J3 Q* y: C. B! _# X8 t) f
& |9 o5 t) c. `! A9 u% z$ y
wc.generate(string)
6 K0 [' \& U$ M. ?14 y6 p0 R) S8 O# [4 h/ ~% h6 C! |7 C# S
词云图保存图片地址; ^& I0 J. C; G
5 ?! a$ {+ ?9 U* q8 S, h' _
: x6 \* k) o! i5 p: |wc.to_file('output1.png')$ x+ h4 R" ]8 v9 F% Y' A! j
1
3 T- w& H& O' X. e/ k词云图的过程中有点慢,大家不要心急4 B% b. X+ N8 c( `3 j3 q
( W. w* Y4 P* ?% N6 k
* L0 x, S+ h. L; S3 k' Q& m9 M5 i这是最后的结果+ c$ t# a; @; p; a
" l; j; ~9 i) q, @4 t! y
) I9 R$ O8 o. i, S) I没有加停用词,所以一些无用的词比较多: W2 K( z8 T( V7 ~
8 [1 t" f- U9 z
+ |* B2 s3 r& T8 f$ Hstopwords={'了', '啊'}
g& I6 ?$ W- N, Z+ z) D1 l1; v- P9 o# M Y9 S8 y2 ~' B
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。6 ?& o# O; J5 ]
我们再来看下) \0 v) L, Y0 j6 D8 d" j
# @3 y; P" [" o& h7 d
2 L6 C h }) j不知名网友:666666 牛批 老哥我要学!!! C( R! Z. N0 H
5 @( g5 Y1 R/ t+ [
" a8 |; h& L: E& c$ i& l/ i8 l9 f+ H& U# \
, T. |' e, C9 q8 [# x
————————————————
- I5 I, z/ c# Y: {版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
* p+ o* I! T+ @原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
5 }; ^% e" D5 s
% b, g4 l$ |' [2 i9 l4 H4 `) R$ c
|
zan
|