- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 555955 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172159
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 J0 w; q2 l" x4 p5 A3 \4 ~
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!' n. L5 R7 o, A( @: D |
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
8 f2 f9 F. Y N4 S5 w康康大家都怎么说!
% |) H& \0 D; Y) o3 M" Q
/ T% }% K$ }" P) C. r- x
H) v% r% T+ I7 U0 G- n& ^" j
. r0 G; M1 J9 e* [8 e7 p" e+ g/ ^ d# _% O* n
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。" v7 g C: @. `5 X1 B% k2 E- j
: F3 _/ D# `& ^" e6 S |. _$ n
$ K7 e0 d; C' D5 N4 ?* x6 D
如何安装模块:
) E* M7 }- j8 s- \
& R/ b& y6 q9 F' F s$ a: U* Y5 w( O/ H( j5 {6 x/ H+ P
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车4 }$ {* a# N4 C% N6 D; y: n- l
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车- R; ?& N% K2 d+ e
如果模块安装失败了,可能是这些问题:+ V. f; l, \( e! p: x, F
4 Y) j U' F/ D+ c; ] P8 r
Z6 @. I- r9 Q v* U# | }提示:pip 不是内部命令
+ Z1 C0 }) E- u2 }3 ]% r# v8 w你python环境变量可能没有设置好9 @" x4 W. T: \8 l. k% z
有安装进度条显示,但是安装到一半出现报错了
# u: u( i; A* L& q) m9 S因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB+ r1 G7 ?' i* Q" b T; S
read time out 网络连接超时 你可以切换为国内的镜像源" z6 `( R1 d- O- `
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
: q2 v. R& m5 Q5 C6 H你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
1 c7 A& K; q. _5 Q P$ K* v可能安装了多个python版本- S+ T. V. \' q. x b' `4 t
安装一个版本即可
C+ R5 z" R9 _1 h$ qPython做爬虫到底可以做些什么呢?/ Q6 L5 _+ E7 c& t
E+ O# X m7 `8 _6 s
U4 }9 X% B2 Q% m* q, [常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
; T @4 y8 E& ]( `% Q12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
% e8 |% l% r: N1 G' ^可以刷课 可以刷网课 自动 还能自动批量注册账号
6 l& |/ e7 p: D4 a0 _模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
, H. f5 }# n; b& S \/ |普通B站视频可以爬 番剧是需要会员的8 f2 i- i: S* f* c- X. F
: ~: f# n2 B: j
7 P0 a0 q; r( P. m% h# Q爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
- |& D& \" R0 w! |! N! Q& d9 G& t; g: k b9 P1 k5 g9 }
- m+ ^% D" ^& V0 P- H1. 确定目标需求 (弹幕数据 那个视频弹幕)( A/ I; {7 l( Z& e5 _/ u# S7 w
确定了
' [; l+ K2 D" a7 e2. 找数据 (数据的来源分析)
. L c$ g1 Z, X7 G9 j, E 简简单单 找到了8 A0 `6 }& \# l* [+ \1 G. r
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
% G, W! p* F1 E3 n6 D/ r0 B 请求方式: get / post; L- m$ E( b; x* F/ T+ B) c \
请求头: " e' ~7 I1 Q2 B- b
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196; P) r+ E4 x9 y3 a% q8 k! l' X
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)& r( o7 \- D/ e1 p
4. 获取数据 r. s9 b1 e" N" w% A
文本数据 response.text 获取网页源代码
% g+ k5 [0 k7 D+ J json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多- {9 s' R9 l4 J- C8 w
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 . g, ?4 F/ i; W
5. 解析数据
2 h9 m* o0 u! g+ e4 G 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 + l1 V' q# {/ v" j/ c3 H
6. 保存数据2 Z0 t: ^$ D$ T, I$ O( k% n
1
8 F/ ~$ r; A3 a" m7 w5 g9 n4 `$ T2
+ [% {* h# m( ]3 u6 E. |- ?1 v38 R& v8 w8 _4 D4 f4 K
4! v2 ~5 x- [0 }- Z7 b
5, Z, w0 C+ ]* n1 c4 m: K& ]
6
& E. d3 M# {( E7/ `( E. ]& I$ S
8
- |0 p1 a q, P C- b% O9 _9 Z9+ J0 n; z# ~7 e) U/ s6 U7 J' o
10
9 }4 E/ G" _4 @% w9 A/ W- h115 I9 S& ?% i, \. F) C
12" s0 f, i4 x8 z' ^, ]2 d6 c
13
$ I; [7 l) R3 M- n/ S9 r& P! b14# P& F: X( ~) d! ~1 J$ ?# @
15
4 d4 O# H1 h% E2 ?( i16; L0 {, d3 b1 j, o7 T
python除了做爬虫数据采集,还可以做什么?
) }/ s0 h# w; j8 t' \兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
0 o& {+ l" j; A* j) i% \4 @0 @' G
0 D; A, l; \* `) v- P6 Y7 u3 H2 y* T- U
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
% a5 K O" u0 V$ _" V) z比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;$ `( P4 D' }5 U* m$ S$ l. o
我可以做到这样么?
% t; U' Q! E+ `0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;* J. d4 X) o I4 m& ] H
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
' g0 B7 C. k% i* w U
9 N ]" @) I$ T1 W8 e; @
4 m" x- u/ e# g1 o7 v0 t爬虫开发(脚本)(就业/外包) 可见即可爬
, A' }( C$ k3 f! b( Z虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
! ?3 [% w' M/ S' N. ~很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!6 e5 z- F3 b+ |( B" o# h
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!* }3 ]# t) } C2 Q3 b3 `
/ q2 E% h9 S0 v: E( H
! A& T# q& G: E# M, {数据分析(就业/外包)/ w7 \9 m+ n# P; @6 `3 V+ D$ d3 [
E$ w/ W0 L8 ^
, V9 L7 q n; f1 g自动化(脚本)3 j, M8 f2 D, q( b
8 l: ?" [; |$ \2 E* t. ~! i7 K4 X( N
游戏开发/辅助(脚本)
& X# e6 m5 |( o1 x3 [; D" W; H7 o- U& }5 o- T+ k% v/ K: d& ?
0 D! r+ Q( K2 l0 ]7 X: h人工智能(研究生以上学历 要求很高)7 T0 u* o# x6 ]" Q
# c7 f w9 m8 a5 G
+ ~$ T5 {4 z" i
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。" f* e( ? y' H% l% _) b
( H! p3 b: L; u+ J0 d9 C# s
9 E+ `- Y% {" X我们开始正题吧
. g H! V/ C7 z* v, Z$ j$ S; F. V
' o/ Z9 x0 H1 j) g
5 q4 ~- B6 H) w( z0 E V2 q爬虫部分:4 ?0 G; Q3 @+ X$ H. x
发送请求 第三方模块 需要pip install requests
3 C1 s9 p% k/ z( _: h- [& [2 I* {2 n: L6 P
& Z( ^( ?1 \# |2 oimport requests
, k. `0 Z0 l- S! T3 @7 Q' Z4 R0 H9 vimport re # 内置模块( H+ r" u$ A5 q# G( d
. \' c! Z6 i0 U) c6 w! `
( j0 @8 i: Y- N1 y7 h; U2 G
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'8 [8 i v/ S/ K8 E- i, P
1
" s- b& f0 A# v! p2
! P. I/ r/ }0 \% R% w! k3
! d: n( |) u. T% x6 r. Z, q49 w% |+ k" V8 T7 @, u5 ]' ]9 B
请求头的作用就是伪装& }2 o9 \- z, c* ^- t! B
/ B4 _3 Y c8 m. L% ^8 }7 |, \
: R0 L( E: ^& }& L, M5 ]: Qheaders = {: v3 Z5 ?$ F" v( _3 C' R
'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'
8 G) n i- F& Z}5 a' p" M8 ]7 K! p8 B* z
1
; {; ]) x2 U2 U% q" W* K2
& p4 x- }4 K" m3 w3
( B- W2 n, A! H# x/ L模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据! ?, m3 Y4 ]4 N6 e& B
函数传参
8 U s3 f' D4 H6 ~0 _2 {0 o" f+ c% |* `* z
; r$ l$ H- N. l! c/ X3 G6 j" f7 presponse = requests.get(url=url, headers=headers)" f$ s) o6 A6 u, C' A6 K
1
; T Y3 n" n7 H! I<> 对象 对象意味着你可以调用里面的方法或者属性
" A3 l7 }% m0 O. B- ~1 S200 状态码 请求成功! ^4 \. e5 J4 l1 H, f& i
获取数据 文本数据
% n; X; |, V- s: g) R7 b自动识别编码( F C2 b7 S% D; A) g# f
: o. B1 c- [7 u3 T% v2 e! @* r
1 [& a7 l1 j" S, j3 c/ E6 Fresponse.encoding = response.apparent_encoding' P4 L! h4 d7 p( g2 n' q# n1 b
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
5 n1 t7 l2 [% G1 j* i7 c6 s1
" x0 `$ E( D8 t ^9 H2
8 n- @. R9 a* }0 Q7 P( R4 J. icontent_str = ‘\n’.join(html_data)- k! z+ X' J" I; m7 D k
/ N# P( z5 h8 I4 [
& I- n3 P& x: M
要列表转成字符串 ‘’.join()
1 H) Y% D1 x( g) f) b4 ^for 遍历 K9 t' a& W. u C
保存数据 保存字符串. ]6 \+ b, L2 B
for content in html_data:! v( M# d9 J+ _/ e7 J( u G5 p
# mode 保存方式 w 写入会覆盖 a 追加写入
4 P) M( D& ]4 b! L) P$ V( w with open('弹幕1.txt', mode='a', encoding='utf-8') as f:+ \- G) v, Z; J/ f/ R
f.write(content)( G4 P9 ` i* a d
f.write('\n')
& ]# M$ w% b b$ o r: ~+ X0 j- Z, Y
5 M" l( x; G# I3 `( S- j9 J# print(content_str) S- L! B; O% }( @1 w4 \% S
1, o, F3 J7 Y0 T; L: T
2) z& ]5 ?. q! I6 J1 ~
32 j9 }& J% g/ O
4
) }6 w$ b( \, [2 B6 ^5: k9 W) q8 m) f5 w, e' F% F
6, w5 T/ [) Z& X: w! Z; }( \6 i! _
7. E$ o8 b8 H$ C& x
爬取结果
# G& P& {$ B- J3 t
& G% t4 w( c( X2 ?) B
/ i* |! G8 ^, ~7 R8 C
j, C" D3 }. f: {/ A
, Y) q, l$ W% W3 e然后我们再来实现制作词云图部分
) y% c1 i" _' p, {1 f1 y, u) }0 ]& b1 C% H
/ G6 G* P' f6 }; ]# [! m! [. a首先要安装这两个模块, E/ \7 C; e+ Y+ {0 b8 ^0 `/ r
" ?4 F( I1 Y" v0 B8 P y
+ V1 i; w/ ?3 y% R: dimport jieba3 h5 B( s( J' z& h/ [; d6 J
import wordcloud3 S4 G. C0 x, u: W- \/ d9 {6 h Y
1
# {: ^2 t" X2 s! a. P( }" |24 t) s- Q/ t" M
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。- @' g( q5 [5 d( \* F
% B* X3 z0 C, N9 v
% }2 i# q& h1 U) sf = open('弹幕.txt', mode='r', encoding='utf-8')
0 F7 R+ \ w/ Z, [7 H/ Ytext = f.read()
- F- Q) n+ t# E! k, O3 J, f- Xtxt_list = jieba.lcut(text)
* X) `- a8 T9 ?. R# print(txt_list). g5 }; Y0 \. T' p
1
. t4 \. k8 @5 V4 {8 q20 f% Y$ [1 s+ i9 K
33 [, g2 b3 K2 p5 z" g( u" X1 f2 ^( Y" U
4! s! M' P& _* Q- [
列表整合成一个字符串
( Z. Q3 L+ ?& H7 c( `4 C
& w7 O$ Q& p! H! N5 }
0 A& N5 ^# A0 W( M6 y! hstring = ' '.join(txt_list)
. Q9 l' H3 i' M1 N1 \& Qprint(string)
7 ^: p7 N3 A. h Aprint('---'*50)9 B" m1 I' c( I( E' c+ v: h
print(str(txt_list))
5 l- R* n# V% J/ p, U6 r$ ]! `" O1
2 R& L9 p2 k4 C8 A2
: x$ C7 i. E2 r; z7 {3
, F8 |* I1 E: q5 y6 n/ g4
5 E$ x/ e# Y7 q0 Y0 `$ r+ }词云图设置
( j3 B0 j4 g# L; V+ V6 {3 m7 ?1 ?+ Y( w
4 L1 s0 R( k- H4 x
wc = wordcloud.WordCloud(- F% \ f, V8 P9 B
width=1000, # 图片的宽$ c% k9 m" d+ U- i0 `' y6 T
height=700, # 图片的高
! J6 l+ \, E0 I% {3 a/ t9 n ~! i7 s background_color='white', # 图片背景颜色: U. X! I( ~( G8 X
font_path='msyh.ttc', # 词云字体/ X$ x, Q& L1 i, Q) `5 k: n
# mask=py, # 所使用的词云图片, {, K7 U5 ]0 X/ e
scale=15,
0 A* Z' \4 i6 F* l9 r+ I6 G # stopwords={words}, # 停用词, O" z8 N+ [' f+ o2 i# U0 D
# contour_width=5,+ @8 [8 i" k6 w! d8 Q3 U
# contour_color='red' # 轮廓颜色
2 l( i% @) Y* y+ {$ k- p)
( N1 G# N4 a3 @( `9 d2 P1! [. q7 T8 ]7 U! M2 X
2; q! ~ f+ r* j/ s, h" `# w
3
* ?6 H$ c; {! p( B9 J4
0 w7 N. {% R) E6 l# j7 Y1 ]5; V8 S1 g8 C/ ]
6
: |$ T9 k. R2 ]2 e) V/ q7
_) ~8 x/ {" |( Z4 ?% Q1 o8
& m0 F; ?. ^5 Z; J! y90 ^' N4 u8 z( Z6 |( p! y T
105 |9 f% P7 t5 [" m! a' @
11
; I2 a& Q: t; t4 h7 N3 [给词云输入文字
, C2 y6 O% V" d
+ H% T9 T: G& X+ R( x+ ]5 @
- i0 @8 r5 {. f+ R1 V( jwc.generate(string)) x3 K! i+ c9 Q, n+ a* _3 Z3 L
1+ O) q7 L. w- Y4 T( W4 P8 z
词云图保存图片地址
2 F$ x) V: n1 Q( d4 h
$ G* c( {# ]$ {0 t8 }. ~( v# G6 p1 P+ P; L
wc.to_file('output1.png')6 |! n7 ]7 l( }0 Z
1
* q: T4 J: w! Z* R0 k词云图的过程中有点慢,大家不要心急( S1 G4 |6 I. F& p( I) O
7 o: {1 R! f4 @% b" ?* _. {3 I7 B
% y/ ^5 P/ b! ~* i& W- j
这是最后的结果
2 F1 g2 `' L3 o! F/ O- g5 S# l" o T" r0 L, r$ w) P" h+ o
5 J& a4 i: |; F9 R. j. O( j9 P
没有加停用词,所以一些无用的词比较多
E& A/ X" V* T8 [1 `8 D# E) u* A5 [' M( m4 d" q+ [! I) H5 F
# A5 A' s% y5 jstopwords={'了', '啊'}
# X, f+ |3 v) r" e1. x& _% J, S+ I
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。2 g0 p+ r% ?- u( z V; V
我们再来看下
0 C: c p9 M1 @+ N" _' K, p8 D4 k. W9 K
+ X6 H! @9 b, P% C5 c$ q- Y5 k不知名网友:666666 牛批 老哥我要学!!!
8 l: l6 W( |2 _2 E/ [; F7 T
+ R; P1 r3 `: [/ R8 u2 [% z4 V7 f6 T! ?& z5 I
' C% H q8 L/ b* A7 z4 m* B) T9 h7 U+ e$ k% |% a3 G2 R
————————————————
; U' o) C; O. a$ {版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
6 L* h; P- V/ d1 B N H原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
1 q+ o& ]9 L* G0 L( y4 U/ z! J' y7 R5 t$ U# w9 r
- R% z" u# d' ^' f+ }" c, N |
zan
|