- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567279 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175407
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
5 r$ ^8 w" a# j4 u+ G) U i
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!+ z9 d0 j3 q+ P, Y
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
( W! Z/ c, e q" `" ^" ^康康大家都怎么说!
1 t2 A2 k$ g" N! U0 S3 u, v) z2 `, a i+ M, N/ T: K
! {2 K5 j$ c' g/ {8 ^( z: k0 J n
( H( R5 d6 k+ M6 _
5 P% b2 L- T5 W) V开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
- c' J* u2 w" Y
4 a) Z, }& E- ]% ^8 @3 ~( i6 t7 d+ D% p- D$ x, B. \5 s2 v, n, ]2 F
如何安装模块:" [7 [- v2 C: o: u& s1 f9 M
/ y+ o8 j6 W1 \4 s3 w
- W7 I; c9 C( L9 U+ V' c: `$ Qwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车8 z! ^: i5 G2 D) t9 J
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车/ X5 r2 F( c( R" ^! P& r( k+ n0 y
如果模块安装失败了,可能是这些问题:
: t1 k0 a' a7 l4 K) G c0 |2 } F. H
8 ?) F* H( r( L+ ^: A( p2 R; Q( }; L: M- j' y1 G/ s; e* k
提示:pip 不是内部命令# \7 }* {, M( Y6 s5 }4 j2 X
你python环境变量可能没有设置好
9 @5 m+ k0 [5 `8 f7 P. D% U. H有安装进度条显示,但是安装到一半出现报错了
; b3 u# m% }8 }% Y' `! y因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB8 e9 X* w: E3 |- E" g6 {
read time out 网络连接超时 你可以切换为国内的镜像源: r4 H- s* o$ w/ M9 h) s/ b
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块1 M& k$ Q: \) S2 Z+ }4 f$ I
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下: H7 H$ p' d: v6 |! N
可能安装了多个python版本
- U+ B. w2 _# E! ?安装一个版本即可) Q+ @- g4 i1 R
Python做爬虫到底可以做些什么呢?0 X+ a- m S1 e6 ]6 J7 v4 n
4 ]. ?! B6 M8 m. c9 b$ R6 O3 h5 ?7 [8 d X# D: o2 {+ F' V% W
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
' R$ S, h: E Z: u12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
. S% u( L9 b3 J0 w) w$ _可以刷课 可以刷网课 自动 还能自动批量注册账号8 e9 }! ]& N2 e+ ]
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
( o& q* L C, |普通B站视频可以爬 番剧是需要会员的
% {$ ^8 Q) @3 P
; t6 z! u& i3 q; h! s5 E7 h/ I* o/ k/ C( N2 i+ I- o& D
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)5 _. T8 O3 M& Z5 h8 _/ r2 k
" p! P; D+ B: }/ n8 @ i9 X
& w7 l9 z- B% G; p! i1. 确定目标需求 (弹幕数据 那个视频弹幕)
5 S. d1 g8 _1 | F+ S 确定了
1 f5 L9 X: [; O9 ?! ^/ e! w2. 找数据 (数据的来源分析)
1 k+ u K. S. ~0 y 简简单单 找到了& f0 C- g, P1 m# m3 B# w, W
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
/ G4 t" f7 z5 j% j: G' J 请求方式: get / post4 [5 {# b& }( U+ _6 r3 f' }
请求头:
4 b6 X) ^" a5 @7 f" w6 z https://api.bilibili.com/x/v1/dm/list.so?oid=376200196/ s/ `* p& Z% C {1 a Q4 m3 m4 w
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
1 k) S- d9 j; L( ?1 Y# E8 Z4. 获取数据 1 W0 B! E+ W- y( d8 U* W! A
文本数据 response.text 获取网页源代码5 v9 a/ X2 H7 g
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
6 h) L7 k6 n0 O* ]. M7 P7 |2 h 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
5 `2 X5 C* P B/ F8 [/ j5. 解析数据9 b1 _+ x. C1 V7 a
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
+ Y& q* {$ H6 e' I6. 保存数据1 a& Y, q! @8 s& ^0 E
14 k% [& ?- M5 x" r# V; h. T. Y
2
6 u, ^( a; t- V9 _ Q3
: h- @3 c( [2 A% K* p4
# J3 I8 |' O/ v" {7 g. H7 J, H5, W; N# W* g) Q7 n
6
5 K- k& F& b! A: n" ?& j7
0 ~: f2 c! h; y- K8: l7 e+ R% K. w! ^$ @6 S
9
5 ]) s; @& u& d' S: [6 K" |5 @102 A) {- U) J/ g* K: k' g G: m7 _
11
7 ^' u j7 g0 i" H5 I4 D, t12
0 n4 S! O7 {. n9 }13
0 b/ j7 A4 d; n14' X7 Z( S4 V- W" j# }2 |
158 f u7 N' X7 f; k+ n! X$ I8 v
16
3 ?" L( v$ I7 i/ p6 Lpython除了做爬虫数据采集,还可以做什么?
/ }; [+ ^# |# W6 J5 I3 c兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
X$ {1 ?( X( h" J: u/ `4 V/ G. f* T& a+ Y0 s! K/ P, r& {# X
" |6 o, Q$ R+ c网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
0 F0 E" h$ F+ w* l( Y" r比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;: \+ t) F. T7 F* F0 I
我可以做到这样么?# `: X4 U2 x, h& n1 K0 Z4 o' l8 _% y
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
3 w% j6 g! e0 y如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
8 c$ x3 E7 n0 Y/ g: o3 F2 @9 U. V$ r n, a* X. q: `. B O
7 N) Q# i) H. q) b
爬虫开发(脚本)(就业/外包) 可见即可爬
+ `% {! C: F# I: r0 L+ Y虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!" r) ?& e4 r9 @6 w# U- ~
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!- @8 m% e3 D, u8 L3 |8 }6 G; V
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
! A8 S. ]0 l* y3 y# y0 T5 R6 t6 `8 {! C {* x* Y
2 {* y. _6 [7 R$ B" O7 d* o6 b数据分析(就业/外包)
/ C$ Y" G9 {6 X3 J) Y2 \
+ v9 E* ^. i% j$ o4 x5 w2 |
; H; `! {) q- |5 v自动化(脚本)
6 K' R5 j; A2 i1 s) Y8 i% h9 e
) z* Y) I1 h& I/ w% t4 C1 c
0 p3 @. m/ ~) G' ?, j游戏开发/辅助(脚本)
6 K% U- j% d* k J" x" o( q5 W0 i3 ~- W& R+ v! Q; Q
1 e% o: z- J& g- H8 h/ z' k# d0 [
人工智能(研究生以上学历 要求很高)
( w0 I( X& H/ v. s
1 P& ]7 v% ^5 e/ [- S2 P7 r9 x+ F# l! O" l9 E+ v( T! ?& i% t; Q
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
8 k; q8 q0 R# {- ~; @* u1 D9 r. F- h
\/ E u% N$ ~; i7 X# g5 p* {' B我们开始正题吧2 [7 b& R' z% R7 V d
( h% a( g, m: n5 O
) f8 C8 g8 J, H4 G3 d+ `
爬虫部分:2 H( m# G( K2 C9 s- D
发送请求 第三方模块 需要pip install requests4 A& \/ i, R8 F" u) [0 e: F' z
$ a, n2 M+ ~! q% W Q$ W+ q2 L4 T+ a8 I" q3 K p+ c2 C
import requests
* E( U2 R% s9 iimport re # 内置模块
( R$ Q0 a; x0 ]8 P d$ }
0 v1 e m. A9 j& E+ ^# D; ]: } l3 r( \* K
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'2 J V) J0 r0 s, r- M
1- n, ^& `/ {3 o, z! L
2' r# I; Y+ w3 o% w$ x
33 h& {+ b! G H5 Y7 ~2 `
4
0 t+ M) t; K8 ]* p请求头的作用就是伪装
4 P( i7 X0 G# j/ y
3 l3 {) z& |7 T/ R" T. n" o; t
headers = {& K- T! f7 _6 X& \# q; G: n# N9 Z
'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'
* G! {7 w d9 G% I8 u}) A$ @4 s! p) v. [1 y+ `
1
( \9 Y9 _, E) y0 A6 e5 I( r/ m! g2
: ^6 l2 q8 l# u2 N4 H+ e3
5 m5 b* G# D' a; x模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
" [& m& L. x& D( L- F' x函数传参/ j r/ ~4 ^8 s* h. S
; k6 j, e( z: U. V
% l! X5 q4 m' N, B/ L& A4 r
response = requests.get(url=url, headers=headers)
$ q5 d( L) ~ r+ I+ c1
! i2 U8 W2 z7 p( K% G" o1 `4 j7 ^<> 对象 对象意味着你可以调用里面的方法或者属性
! t+ p9 K) g: U2 @3 l+ j200 状态码 请求成功' _: X/ t3 D' G3 x" I
获取数据 文本数据
5 B# J. O$ o# C9 L- w& j自动识别编码
3 d8 w# s$ L# N. H; f
0 d! O5 K* @' O9 t6 K: ?( r8 \0 l2 |4 X
response.encoding = response.apparent_encoding* U, `8 r( y0 c& G
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)5 |. b% L8 M$ f* Z+ o- \
1
/ {; }1 E/ i5 W1 ?6 }2
! x9 }4 C) R7 {1 U- y& @% Zcontent_str = ‘\n’.join(html_data)9 O! X0 s9 m' J2 I
. v! v3 ]$ _+ g
* J7 q9 ]+ O& K. N8 ~9 r要列表转成字符串 ‘’.join()
4 `4 k, K5 v8 Q! Q+ xfor 遍历4 A7 f. H7 G1 J! w! j" ]
保存数据 保存字符串
" |. l, U; g; N7 D( T! c2 Ofor content in html_data:0 S$ y% m8 R) |* e& s$ }, F
# mode 保存方式 w 写入会覆盖 a 追加写入
C: U1 i M! ~7 A& y: _ with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
$ t4 O% e$ v: k) f' f f.write(content)& j4 m; A9 u1 l3 w# G* U
f.write('\n')9 ~% ]; {. | k+ k
3 U! F) y( W4 H5 s
# C! @: Y9 S7 I# print(content_str)6 g# A ?6 Z* |$ q# t
16 w" A: }% R6 V2 i, a4 z. T) [3 p
2
2 w3 k% g O+ T) y; d3, _: q: F6 N% J+ J
4
- b8 @- J6 {+ S+ W4 A1 T& t, w& V55 @* G& M" `9 e; S% x
6! \, C" q" {: G( b& P9 m6 n! h1 m* {
7
& v( H, K4 G; f. [& Q% S7 z爬取结果- |2 T8 z! T$ O9 A( R
; A2 r" B3 H' ?9 \$ p. T% M1 ~2 Y
' |# f$ M3 W4 z4 R ?) w, u0 \; b- N1 D
4 O: x9 N4 A9 p
: m8 i. n# v4 ^) E; T1 o
然后我们再来实现制作词云图部分
3 \8 @2 C1 k9 O; T
3 Z3 h6 W: D- l+ y# m/ `
: ]; T% z! M0 ?; \7 g, t$ }首先要安装这两个模块
; P6 _! y) P- h; N- P$ F
+ u+ T x8 ^6 Y) J. i7 ~
) _0 @/ P5 k1 P/ ^* Q( Bimport jieba6 h; y/ u, g1 Z
import wordcloud( _, Q- [) U" N! Q, a
14 ?/ X- \7 ?7 Y1 c! ]. X
22 j: U, s5 a$ }- w V& Z
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
* G3 k; r1 C3 k+ d% Y1 @$ p, R! l3 k5 S j5 M
: t1 [$ L4 h% ^# r% e2 i
f = open('弹幕.txt', mode='r', encoding='utf-8')
$ n3 J$ p) C* t5 @( K$ ], Dtext = f.read()
5 P( L m3 k& H8 @& ^txt_list = jieba.lcut(text): M3 F+ M; ~; Z9 r+ Q4 a& O' S. _
# print(txt_list). w4 N+ K$ p- o8 p
1% ^3 X* \0 T4 f+ P2 F
2( O5 d3 Q( a8 J! L" }% U$ f
32 u3 W3 \/ D- v* v5 X
4- {4 E1 Q3 Y, r7 G
列表整合成一个字符串1 _! u9 g# T5 a$ X6 }+ m
; Y! p3 ]4 m! V5 R" g' [; D. S& u5 s+ {, x3 b" x h2 g4 [
string = ' '.join(txt_list)3 {" m6 i) C P6 M( m! m6 P
print(string)
1 r4 r ~ O: y' d3 W. g4 V1 |print('---'*50)
: @2 ?" O. n' O! h; Z. ^print(str(txt_list))1 c+ l7 _* j1 C
1. p( _5 F* W% n: r. S# @
2+ J, Z. k5 |5 n5 S. F. M( ?/ E
34 x# y5 m& Z8 \3 d; ^: F
4
/ E& N. |6 D9 t$ C2 x8 i4 Y词云图设置
; |5 U( c. Y$ h ~. T; u, l( }) A' |7 N
" K) I* V2 }( {5 pwc = wordcloud.WordCloud(& j4 I- D0 i- ]6 q9 z$ r
width=1000, # 图片的宽
0 w! g. d0 R9 _: L8 K' v height=700, # 图片的高6 h- V1 f Y1 {3 ]
background_color='white', # 图片背景颜色
# J j( p! I; c) M2 Y0 S: n font_path='msyh.ttc', # 词云字体
/ X9 X1 a2 e1 o" Z # mask=py, # 所使用的词云图片* J/ P0 ~8 j7 S* \9 z. q3 S
scale=15,
6 Y. U0 x+ `& @0 R) {; q, T" R # stopwords={words}, # 停用词
0 D( w, v9 c8 }; Q. R' Y # contour_width=5,+ S X% O. N3 P# H
# contour_color='red' # 轮廓颜色7 ^- Z- K# N9 s
)+ I! l/ ?2 l" _6 M5 Z# ?5 p
1
( s$ ]( o; _9 ]6 S1 C24 d: w& y6 l9 ^, h. K5 T1 m
3% {) }1 H3 K1 e. c# J
4+ ^: J* N U( d
5
3 O* \6 r. W7 o* p3 ]9 p8 s i& B60 G& |8 A4 Q6 s5 Y/ L, ~
7
' v0 t+ y& m3 w! m! i0 P+ ~8: }# T: w2 ^9 p, B5 L! k' I ?2 R
99 E5 Y8 d+ [, |& E9 Q: |' m
10
h* ~$ o( }' d/ a11
" K1 D" K) r: @! Z' d- u9 z给词云输入文字1 I1 q5 v+ @4 c, ^
$ M# l5 w* l, _ T
]+ k- r# G) x. `* r4 r( kwc.generate(string)
1 m! h. ^- |6 P1/ I# T* ]$ d( f+ w2 o
词云图保存图片地址
; p- V0 f. O8 S1 D9 M8 `: p; @; M, N1 R% T4 s, i
; O, @, q s$ f! N5 {0 V. }
wc.to_file('output1.png')
0 l! S$ L# d$ `) G- G1 Z1 h1
5 |. ]3 [0 |' x) C; h0 v词云图的过程中有点慢,大家不要心急2 U2 c, S/ i- Z
6 t$ T2 ], Q4 {& `$ Q7 _. k8 n+ o1 d4 s: z3 |# x0 r7 \
这是最后的结果( |. V) L+ Q( ^' ]+ N
. W3 q+ \/ B( Q9 n( a$ u! ]+ F8 a2 c; c4 B, ^. C
没有加停用词,所以一些无用的词比较多
# Y2 ~9 s' M9 K" V1 v3 P1 p0 O
: m2 {0 c, Q+ K$ N: [2 T6 ]" g8 V
stopwords={'了', '啊'}5 z3 \( ?; P, @6 S
1
" v* D0 @" O/ Y把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
% `- f9 {( l( D8 _我们再来看下( P) t8 l/ I1 y* g5 k6 X
6 a/ ^3 c0 _8 b7 k: v! j& E
4 Y* C# b- u0 _" Z6 s( g" U7 _
不知名网友:666666 牛批 老哥我要学!!!' X( i" u- O. q+ c6 g9 M0 t' B; C
) T: [- r) u) F! u/ H' i
5 U( Y+ n4 P+ [
6 u( M. U# D+ N5 D. L! k* m$ P4 W, P! ]
————————————————
* H4 Y6 `# L# p0 |版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
: E* [# T; {0 R% b7 L6 Y! ?* }: f% D原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
0 j( [! N+ r* V* y, x; b7 a7 T8 m
# u5 a3 N2 {) _4 N2 u$ J4 u# K, n4 V+ Y' C2 V+ S# H" M
|
zan
|