- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564697 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174632
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 m+ Y% y7 H3 z+ L
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
0 G- v. [* H0 Q9 ]- x今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!8 v7 W% e, b: G) v n- H4 h, _6 N
康康大家都怎么说!4 ~' w1 {8 T' B0 f
( l1 m/ R# i6 D( G& N
+ `$ \& i U5 f0 X0 O4 P* N8 j* k! T4 d, C+ ^& R) |% L, b
; N5 K8 R; A+ _4 I! p开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
% o# T# G9 a F! s6 l E+ S* \3 j5 b4 T1 G8 S5 w! e
1 ~- j5 [) r9 x! z0 E, @) ]9 c! K3 C
如何安装模块:
1 j3 f" B( N) H& i; k! S" _4 [
/ W: z/ b5 j8 l0 n- r( F
( h# J' \: h- N% @0 ]- M5 _+ _. ]win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
5 @8 C. s* n3 f7 vpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
" s3 n5 F" b: @+ \如果模块安装失败了,可能是这些问题:1 d5 r# S7 K0 y3 g( w6 H
/ P; E- I g$ D
' o6 l v+ n% h5 K3 `7 V
提示:pip 不是内部命令
- D$ x0 @2 H! b a H你python环境变量可能没有设置好! j; O W% s# B5 R2 L
有安装进度条显示,但是安装到一半出现报错了# ^% d" S) n G4 M
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
( G+ h9 h7 d1 P" T {5 w1 O/ _) dread time out 网络连接超时 你可以切换为国内的镜像源2 w5 R$ W( O: ~: I, O- g2 q/ r
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
' q2 h6 u4 C/ p S1 m你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下8 V8 o4 {& s x2 I9 p( @
可能安装了多个python版本
4 D) u5 K, X$ Z安装一个版本即可7 h( i% e) h5 A! U- n
Python做爬虫到底可以做些什么呢?) x- U% T2 T: R+ L
( o# a# p& t! J! z: j/ h
. i7 s" V" f$ O9 ~1 h1 h常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
3 q" ?7 K+ F1 r8 e$ A; n9 ?12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
( e' F: n, l! ~& U可以刷课 可以刷网课 自动 还能自动批量注册账号
5 B( w1 Y8 _7 J: _5 B& u: d模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
' c9 z4 z: m& D+ k+ F% s8 D普通B站视频可以爬 番剧是需要会员的- c; ?7 F/ Z w0 S0 u- E
1 H+ ~6 }- D/ t" e [9 K
: F" h2 v7 m9 A$ b4 E- \爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)1 F( a* w) \7 P5 A: ?/ l: O
" O _, U: ~' U/ f, E
* W, [ L4 ] G# r1. 确定目标需求 (弹幕数据 那个视频弹幕)
. n5 l' }: M7 a2 }- a 确定了$ O/ S# w: I$ K' V4 ] }% j
2. 找数据 (数据的来源分析)
. T3 Y; q$ z/ O- y! }4 f 简简单单 找到了
`0 U. S! C i% M# N# ]3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
5 H) A4 c' y2 m3 f1 A 请求方式: get / post. T0 C! B# n; t0 s
请求头: ! V. ~, w, i4 j3 `) v" i
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196; O8 D& t( W4 M4 q# K7 H/ X+ i
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
' m; M: P% y7 X" Z; q' h4. 获取数据 ! p; u6 P5 T8 p+ M8 k
文本数据 response.text 获取网页源代码
( {( }4 O$ w" C4 Z2 ]8 P: Z1 z3 W7 | json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
! S" ^3 L# T% h% `: R. R [ 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
6 J6 r) _. ?% ~4 f2 n7 H8 x5. 解析数据& |2 Y' M" Z; h3 Y$ R" ~
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 8 k9 c6 R% U M; x$ j3 ?
6. 保存数据
- }4 g1 y9 k5 [) P1, ~. o6 K7 E X4 I. b4 }
2
. W9 _$ L6 y6 {9 V1 v% G3
; E. U; P4 @$ l8 e2 J* j41 Z1 r! ^7 W$ [7 _; ?9 C. s
5
( ?: J2 p: V9 J5 {' J' Q7 h61 n& g0 _: n$ r4 q, M0 |# w
7$ Z" a) f( j1 p0 P6 A7 p/ o
8
2 N1 O$ I4 ?/ [$ n/ a3 b8 L9% i4 C/ ]$ Q7 Z9 }8 P; V3 ]$ I% Z/ s
108 f7 L/ U& B ~& I3 r% ?
11- ?# S7 \( l3 D& y& R/ H
12. E9 v( ~# B' z. I
13 ^0 U* @5 T" f& K- ]9 G7 p
14- r3 E, I( {6 X' j" k& @( z
15
* Y' f/ N9 }9 p! Y16& K1 v# r' j0 E
python除了做爬虫数据采集,还可以做什么?
* E; Q+ W" L, _ P4 V兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
$ C1 J( s. i* x1 p& c7 W1 ]
- B$ v* m) n# V/ Q6 ?% @7 v3 }
; w s: s% s) O, j8 {8 _! d) _网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K4 ~( A# g( ~# ]$ @0 V4 [! y
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ; p7 I( I/ U/ ]9 _
我可以做到这样么?
. t) i; d5 V3 H+ g) b* g- C' |0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
8 g# }' _* e8 e( F; Q" J8 E如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;- ?! C6 Y9 g* o
1 w# F; c+ Z6 N+ t, g$ g* [; J& M% X7 M
爬虫开发(脚本)(就业/外包) 可见即可爬
$ E: Y. q! k5 ?: j+ E虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
' p! J- ]4 f+ g很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!, Z9 f7 s- C, D, r% o9 b; i& j
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!$ D; e1 ^$ r6 d% y
' T: |3 A. C: q9 n6 ]3 G8 E
- D/ s$ K. S5 m7 V; @数据分析(就业/外包). [+ O/ N/ P! A8 V9 b7 n7 ]5 c
4 [5 K3 |7 ]" Q1 {* f: p6 m
6 n3 l6 t% I1 O自动化(脚本)
# V, N% a; w( O$ |, q
" R: t9 G) s/ `) s! U8 X
* v Z' N7 v( a8 t5 X4 s游戏开发/辅助(脚本)1 S# Y* [( i8 }6 T, h9 l
1 b4 k0 J8 o3 f3 |% f( y+ O+ Z& g( A' I1 G, Y) I
人工智能(研究生以上学历 要求很高)
8 } Y% ~6 n! y! h% m& L4 g
3 r4 ]6 j4 ~7 r* e" q7 B) ]
$ w4 ^, B! L& T" f, \. r; x3 F等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
; @+ X7 f( e; h( ~- i" z: L& w. o1 K+ s/ X: H8 P/ `
* w, X( Z0 I% w* _; N) P; C: y我们开始正题吧) v& J: v! d7 u
6 ?1 I' b4 e& t
B2 [+ s& [( b% z {. _3 A
爬虫部分:
4 e- C, X$ j+ P% t8 l p: c0 `+ F( O发送请求 第三方模块 需要pip install requests
* a- r/ I" g. i* G$ p2 u4 Z$ b$ ^5 X, h1 h) J7 M
. x/ s F# r* {2 |7 { m8 J* p: simport requests
* W8 r; F& @' j: Eimport re # 内置模块
7 s( Q) W9 }. w3 {' Y. a
3 ~* L, \! f: t6 m3 ~- k- L
# E& {/ @9 C' i& r. p7 i; Zurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& a' p" O |9 R, M' ^
1
8 z* L2 Y k# A, y9 B. b2' E0 T, U7 C7 z4 j& L
3
2 G* M1 H6 o/ v/ s40 ?# ^$ e0 M, Q$ x4 a8 ~' M9 u( c
请求头的作用就是伪装2 \: j; ]- n, N
5 M0 O: I. ]$ _! F1 B0 E! y/ A
headers = {
4 I w, y7 ^5 c7 G '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'
! A2 b9 {& W. o8 K6 ^ x}4 z9 P8 K3 ]9 U0 M) }: X7 |" A
1
9 }8 _- N% M. R1 M0 f9 k2 o2) b+ ?+ u, q$ h. b
3
% I1 U7 p; m. W- C# [) H3 Y模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
$ J# h6 d; |1 J5 L1 _函数传参
/ H' G' M# [) E# Z4 `4 Z3 Z+ ]$ S/ w4 y% w5 W* `3 n9 `# R2 r- X: ~8 y
& ?2 y5 N a* @/ @* n- ^
response = requests.get(url=url, headers=headers)
! q( B+ |0 a6 p1+ N* s) o) x. q5 I
<> 对象 对象意味着你可以调用里面的方法或者属性* G0 i" r; Y# o5 j; \9 r7 s% |- Y( D
200 状态码 请求成功
0 o H- u6 O; I. B% o& @获取数据 文本数据
7 e& g9 B9 G/ E1 m2 d& y C/ U# H自动识别编码
% H/ X9 v4 ?# H) h( }9 H: k' U/ ?$ X1 H# J. Z
, c) o5 A4 P l( h7 _. Tresponse.encoding = response.apparent_encoding
8 V1 g9 F1 d; }" H3 G% Ihtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)& e: Q; f$ w. Q; R; p
1
+ Y! m1 z' S1 A2
: R% @5 w8 Q7 K/ N3 P" ycontent_str = ‘\n’.join(html_data)
9 K+ Y f" | \( F2 ?- J3 L. z1 k: b7 P8 y0 t$ N7 _
; w; a& i4 ~6 z P& F
要列表转成字符串 ‘’.join()
& _7 ^: E7 S: L3 @9 _3 z, M9 z. Pfor 遍历
% ~" L7 _ H6 \( n) q" }保存数据 保存字符串
/ T0 \9 h- F2 v) S. xfor content in html_data:6 k5 _8 B0 x0 m _3 H
# mode 保存方式 w 写入会覆盖 a 追加写入
5 ~$ u7 A& h4 _5 b+ ~$ H with open('弹幕1.txt', mode='a', encoding='utf-8') as f:" e$ F) n7 S8 W+ b {0 y
f.write(content)! R4 Z2 Y0 f2 y; w# S' D$ k
f.write('\n')
$ z, Q' R- p0 M9 u. [1 {, W7 E0 Q& h' o n( k" s
, F' T: n: i( ~) ~! Z- O$ m) {# print(content_str)
/ j; f$ M( ~0 Y/ h2 y% A$ o1
, Z# D7 E, d" N2% a$ l+ \( n6 n
37 P( [" y& F* o$ U5 w- `4 _
4! `4 L2 g& w, j; ~. k" Q
5
2 b2 J* I/ H, d O X6
; z4 C* n% r) R1 e- y7$ ?1 [4 F- Y% G8 i& `6 w4 A) d
爬取结果
$ ]4 ]2 c! I! |# G
! B% z( C) {* S" ]! @2 g& z) ~' l+ R9 `1 i# D+ Y
' [+ |; S5 H1 ^9 _9 x8 f
! d* I' L5 P _" L. r. t* C$ t然后我们再来实现制作词云图部分. N! `# X. d0 f% l; O3 l% ?
# c+ g: W- ~, B1 o" N! p$ L
- A: G/ w5 R6 W7 T- ^首先要安装这两个模块6 N. X' o, T: g
* H5 _ b: E. j8 Q, X) P
: n. r6 {9 o7 Dimport jieba! d0 u$ Y8 ?: e$ {
import wordcloud
. R$ f( E- E1 W9 S8 |: w4 c7 B! }1
( F# b' S' l2 d! t8 a. R3 @0 s2
! N* r, G# u" d2 D: W$ J: I# e一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。3 c# f/ J5 x6 w8 N; n; U# e- ?
* f `$ @8 y4 m- i
3 l, y y" i. [1 [1 ]$ wf = open('弹幕.txt', mode='r', encoding='utf-8')
8 {( U# B" @! utext = f.read()
) f9 p F& ~- {) y& Btxt_list = jieba.lcut(text)
) p" R5 r/ ?. F" n" b# print(txt_list)
; b$ ]. |7 Y/ p1
: T* {' ?/ R' W2 }( k3 c0 l26 B" d. C1 c5 g4 S, y
3) R5 V0 m" [5 c# }5 v7 Z
4( k% ^8 [6 Z' z2 x* V& n* N8 i
列表整合成一个字符串
8 D! D5 |: K( U' Q2 H5 ~! a8 Q" ?2 ^6 F8 Z
7 m( E( x# M1 v* x$ a2 h( {string = ' '.join(txt_list)
8 M/ v9 w( B6 I9 S1 q7 eprint(string)- L$ _# |( } W. w* B( f
print('---'*50)$ `# a* H. l! N9 q" y/ t3 b
print(str(txt_list))+ S$ G- J) z0 N$ {( p& ]/ M
12 J! _& x# ~, J# K0 ~$ i6 T
22 n2 D! j2 z% X
3
$ U' S; K9 Y/ d8 `5 Q/ E) k0 f49 q! _9 ^9 u' ]* B, P0 Y
词云图设置
2 x$ ]6 H2 F( ~0 z, Q& e0 d( W7 ?( l3 ?
8 r& {0 f; v$ N- N- u9 C" K) f( N
wc = wordcloud.WordCloud(
( z7 R2 ]- Y4 C width=1000, # 图片的宽
9 c: l, N/ L" r6 \ f* {% O; x height=700, # 图片的高
: u U9 K7 |- e. k! C e8 E background_color='white', # 图片背景颜色' Z% _) P0 d! n7 s% K a
font_path='msyh.ttc', # 词云字体
( A+ p) x+ H7 ?! k; x+ U/ S6 L3 }9 T # mask=py, # 所使用的词云图片
6 T+ F! E0 c- D scale=15,5 q! \8 @/ K/ ?0 i I- r
# stopwords={words}, # 停用词9 m. P; F5 f+ r% h# K
# contour_width=5,8 O" @% @- a+ a- f0 ^ [
# contour_color='red' # 轮廓颜色9 q2 ~) n" Q4 G. S; n" U1 T
); Q3 N4 z6 D; H+ Z; w7 M
1
1 _; a; x$ n' O# `9 P2
7 j: y. o- w# a7 |# C30 {0 P: E; s7 g( S1 [ _
4
7 P: S4 Y5 c" b# [5- j3 @ M C" R& _" \0 s: C
6
# u( L/ H% l- [+ ~3 [7
9 _: Y3 C* q) E1 B0 U8
* E+ P# B) E9 i% q& |+ {9
7 p) ?) S+ q+ N: i10
e; `$ Z* H8 o/ W& C2 Z( b11& u% H6 B% ~2 \2 ~. S' Q6 i: o2 L
给词云输入文字
p5 K+ c! n% i/ ^$ b6 I+ w, B# i( X
3 y) f! Q: v% |7 E2 Nwc.generate(string)
, N. E* `' f( S1
7 L4 a/ D& z( w& y% b% Z% h S词云图保存图片地址
" ~, l; L8 Y$ r6 u0 f7 n$ N( e2 L: n( B' {( L& \/ M. q: f% M
, ?7 e6 k) y0 A+ ^wc.to_file('output1.png')$ i" n/ k0 T! U9 j& k0 E' X9 W
1
, Q& ?! c7 [& J1 C' h# d词云图的过程中有点慢,大家不要心急
6 H3 K! O, u5 O! }* T/ E
9 K! s; l: n7 _% R B# D' w6 r8 O
) n; e5 N2 I5 O. g0 `% A" G6 w这是最后的结果( T% [- C: t) Y7 N3 t5 {
, A( ~/ m. M& C$ u# o3 A* |( f. t
& K6 Y2 S+ C8 W7 T# q没有加停用词,所以一些无用的词比较多
5 F0 U0 y3 m8 h3 I! V" p, V4 `6 G1 L) P X. f
/ C# C& K5 T+ `8 k0 Z) q' P+ Dstopwords={'了', '啊'}/ W+ R* F4 p4 t
17 H8 x. U$ B/ y4 g9 K) S
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。 d; `: W* ?& t. ^ x5 k: |
我们再来看下
5 k$ q5 }' T; [% [9 f% k f" \+ a$ U$ P0 a+ T
5 }: _0 v+ ~' q+ _
不知名网友:666666 牛批 老哥我要学!!!
3 E( n) ]" ^ t. ]" Z6 a. M. a# J0 M5 @% e8 x- N3 V0 s
% c2 X# U% ?; b& S1 R( Y
3 }5 O6 U2 F, J; P) {8 P3 B( `+ u6 i5 a/ a8 v f
————————————————
f1 S1 Z; c3 X3 u! i2 P版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 {) ~5 s; p- Z @3 d |, U v
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
p s4 ^! `1 h2 c+ x' |+ w1 I3 H4 W" E- _% X& K0 m. h# I
! m5 ~; w# ^! o
|
zan
|