- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 570622 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 176409
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
" X( p' [1 ?0 U" `7 ^
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
$ U: n- O- V% k" T$ h" Q. W今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
9 E+ z) m; H) n2 o6 q康康大家都怎么说!% f' K) b: J% a* D( k
9 r5 g( v! P: l; l
8 h2 [! c; q( H( A* V
' Y' J% R5 h! I! n# h: v% ]3 K2 G' ^5 F3 ?
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。) Q+ o- V( {9 I" x8 `
! W- _! y2 o5 r7 E( q( F1 {4 G5 S0 R
如何安装模块:
+ N% ]3 x: O ~5 @; ~4 V
0 C# v$ F# ~" l o6 F4 i8 s0 W" H1 O$ b
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
0 x* M' ~% j, U epycharm里面安装 terminal 输入安装命令: pip install 模块名 回车, v. H% H1 c; A7 A
如果模块安装失败了,可能是这些问题:$ H) C7 p' V4 q$ T
7 }& w0 l. s7 h3 C. P$ {; E9 _
2 d* F! f+ \% k( v+ O- F
提示:pip 不是内部命令6 |, g* k* b, i1 j* D5 H% R
你python环境变量可能没有设置好
, h) f K2 D6 r: u w9 X' W有安装进度条显示,但是安装到一半出现报错了" t/ i C( U1 [; \! v( q
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
. F, u7 R; [& s* ^4 r+ ^4 pread time out 网络连接超时 你可以切换为国内的镜像源
6 s; T z; l+ X( e明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块, J2 t! B5 w: b
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下4 ? q6 I& ^7 a9 Q( h3 W( a
可能安装了多个python版本) _" ~3 k# \$ }" f6 Z8 g+ Y; n8 C$ M
安装一个版本即可9 s) \' f) s7 i/ \ ~: i
Python做爬虫到底可以做些什么呢?
; R# f: o7 M! Q
1 v2 z' v3 j, U+ q+ F- O; @3 }) w. W A' [- R! \
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
4 q8 S" b( Z$ a1 O12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
7 {1 l1 U" V; A可以刷课 可以刷网课 自动 还能自动批量注册账号
, Y; ~: f; f, H+ @6 @模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …9 Q+ d3 l4 s* Q( u6 \7 U: K5 v$ ^
普通B站视频可以爬 番剧是需要会员的# G' o" W( ^8 f7 N, s0 k! b
! `9 p& F& ?! `& u! b
- t8 M k* N, r. A$ e3 o
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
! C h1 i' k6 \2 L" V* f
' O' _8 ]/ @, J+ O! M
2 [; ?1 ~" v u2 g4 t! g8 ^% R; L1. 确定目标需求 (弹幕数据 那个视频弹幕)- Z( b% t6 S5 u. e# T
确定了: u, w1 Q I/ I8 ^7 d" V
2. 找数据 (数据的来源分析)
$ d G! n# b$ r$ p9 G& Z* r! J 简简单单 找到了7 }/ z3 ~' W3 }' x w
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
+ Y2 J+ }! _/ b* \+ N 请求方式: get / post9 S$ r% N: v$ p, F& {3 e
请求头:
- ]1 U: X9 i2 @) \! l( P$ g+ e https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
' O" w4 l4 K" K0 I4 f (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站). N6 @5 F/ t2 c8 @$ x3 m
4. 获取数据 * i- F& y6 T" s7 E
文本数据 response.text 获取网页源代码% @- H8 P8 X) C1 P+ W8 _9 g% h
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
# T k( N0 {. V5 N7 j 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
3 B( y# z0 y" Z% g3 W5. 解析数据
2 c& Y- |* q& X 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
* Y u" `* Q# f7 ?" W9 I6 S, G6. 保存数据
. e! @; l, ]6 [' b9 s1 ]1' m4 x I) i' g o
2
3 g# H$ ` A- ~$ }31 I g3 b& h ?1 @
41 _3 `- r9 N6 a1 Q& S
5) \( o0 C4 ?7 }7 P9 X3 F" e
6
# B3 U. R! P7 V' m4 e* s w1 C7
3 V! b o* }3 Q2 p8 Y5 Z( m8
& Q9 b- a5 M0 V# S6 ~2 o9* v p! q. B f
10
2 b# l) ?0 ?% h R11
K% | a, J% E7 Y' E12
# K0 c: S, T& r; }6 \2 s& {# g0 x13
% }- G J5 G: t( Z$ x14
7 ~5 c- J0 J7 E j' I: M15, c- F( T; n2 _7 a
167 W' q3 _1 {; I. J; ^7 q
python除了做爬虫数据采集,还可以做什么?+ _$ y+ m. P4 j, V7 v. ]
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
& |8 ?/ j& D' [1 G) B" Z$ ?% u! v7 J/ L1 m
8 B u' L0 Z/ {7 X0 T
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K9 S: N2 z8 U6 J+ ^% j
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
+ M \# I/ M! Q1 L0 ]8 W我可以做到这样么?
9 h( H* D; k) q# s' [5 s1 D5 E1 j, y3 P4 e0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
8 w+ p8 Q2 g% I. W$ o2 a( G# P如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;& X; b0 l3 l" C' w
1 t' D: L/ `- s+ y* h
. C' R5 X7 e: m7 t1 B3 ?
爬虫开发(脚本)(就业/外包) 可见即可爬
x( f* p' k0 M6 {虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!# G* p0 [" u G4 b
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!1 R) g5 [2 n& N
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!: r8 g8 p7 J- F: d5 O7 b/ B: M
( t( _6 ^6 v5 D3 ~# Q% T# B' O" |, I5 K" [* h8 N( L+ f
数据分析(就业/外包)
+ q/ j. }, W! c" ]/ t% U; ], n- f0 z2 z0 g' d: M; j
" J0 t `* h/ s# N1 ~, G自动化(脚本)6 G: e) A* Z! [& {% U$ z I
# @, h2 D9 O* e# w' F& w
$ w% D& \8 Q% G游戏开发/辅助(脚本)- T4 C' `# R8 h; a" \- g
$ ~6 j, Z# R3 k( R( ?! ~" B# \) ~1 b, y* s5 [
人工智能(研究生以上学历 要求很高)4 B7 w; v; \( k6 B* c9 H
; ~+ t+ x+ _" ]9 T
3 h! e& ? R) l/ m. @( S1 K9 U
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。2 q& p: a1 y4 g1 B' Q0 x# Z
) e! A4 k2 ~& N) K# ?3 X
5 m; Q, q0 D. W+ E5 o x
我们开始正题吧& n% Q$ c. }6 \) ~7 L1 I- V
0 ~0 J/ b3 \: i) U0 J- i2 A
3 Y, o4 s8 J' l
爬虫部分:
v7 n( [8 t+ k发送请求 第三方模块 需要pip install requests& ` V" x `5 P* ? q& O
4 A! N/ H7 f1 i# e
8 T$ f2 Z: m5 E9 l9 X; Z) p
import requests
# ?5 A8 e3 ?7 r8 o: ?7 [7 kimport re # 内置模块
4 {7 o" |8 M( b" _/ ]- ]. G
1 U) q7 Z% a, E! k/ U
) E- s/ Z2 g/ kurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'. H; {3 o- M4 n6 `5 N0 O
1
, T" x5 g( n! T2 V2 J2- \1 C% ^2 n! W- V5 q( S" _4 r' a; I8 u
3/ c) H3 I$ V9 c* l0 ^' D, f; b* Y
4
5 z4 N+ R) \* j( o$ [; o' M* ^% x0 w6 g请求头的作用就是伪装6 H A7 ^ h) W. v) w5 ]! Y
( r! F6 x# K. \' T0 k# C
4 r3 I7 O0 X! I% w" f r+ H; ?
headers = {
2 @ v/ ~2 v# Y3 [ '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'
$ y5 S! I5 M1 j$ Z$ O+ f6 Y: ?}
' U' k% N, I; f* B! {7 h1 a$ R1
1 @! t. \ ^6 u- d9 [0 V2
% r% K- R& W" \( Q& D3 z30 H+ e$ i, _$ a7 C! j* E& |5 p
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据5 H* o8 h/ | `1 C
函数传参( X5 w1 H4 X2 Q& c! ?% b
# ^4 {2 z4 b# j0 R4 n3 o5 j
: b% C3 @3 T" f% Q" vresponse = requests.get(url=url, headers=headers)
0 F* Q. _! ^; h0 b+ t$ _1# |* [. B0 C; }6 J
<> 对象 对象意味着你可以调用里面的方法或者属性
J M9 |8 f2 K0 Y \200 状态码 请求成功
/ e: m, V' D1 y6 A" W获取数据 文本数据
5 H) L* |& W- S. U$ h自动识别编码
8 d& A; E3 B" G( j7 z6 _. p2 m: z' [$ E* Z3 y6 {
, j: K/ c% E. Z5 n! Oresponse.encoding = response.apparent_encoding
+ B( R" u, t3 u J. Shtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)- e7 Q0 M, e M2 G' y- K7 l
1# T9 D. B% \, H
2' W1 w& t i# M, z, J3 I6 z/ c
content_str = ‘\n’.join(html_data)
. X% @/ p d; m% Z5 U: T7 [0 A+ \" C% J- d5 y
6 o7 s, |, Z5 ]( e+ T7 J4 Y4 [
要列表转成字符串 ‘’.join(), p5 U; _$ u7 c6 L$ d
for 遍历5 ]3 O* {5 B1 } F
保存数据 保存字符串6 J0 r8 Z+ R7 s5 i d. h
for content in html_data:6 Y3 n" y! H7 }: b
# mode 保存方式 w 写入会覆盖 a 追加写入
( ?3 W5 w- Q+ P, H6 l3 ] with open('弹幕1.txt', mode='a', encoding='utf-8') as f: m, [7 B- h2 f/ T- H/ s+ D
f.write(content)6 h0 F. h" p# G% K0 O
f.write('\n')
& P$ p2 g" j2 ^" b) Q" N, @7 g7 R; k1 \
" M; |( H) U5 w7 q: U3 x3 ^, x+ G" s# o$ b' K
# print(content_str)
! R1 M% B) `2 L8 Y1
0 w! E7 r. {8 r2
! I% N9 ^# h3 p# {3
+ ^. r+ V. e- c: a4
/ y( j; v& G6 x2 }, H0 r- s+ z2 g5! {6 k: f3 e5 W# B
6
2 `/ Q: T$ C, }/ G# _8 ^7* Q" f X5 Y2 \9 G, Y% r4 N8 @: ~& w
爬取结果
- d* Y4 \. ~3 d4 ?7 _9 i. B. V
( q# {3 \9 _" W3 c: r
9 U1 c4 V$ \$ C; k {
1 \! o8 }$ l! Y4 |. @7 i- A' n9 i# V) E$ B) P
然后我们再来实现制作词云图部分% \0 ~. R. ^* G" }2 J8 B. w
4 n& B: n/ N G5 j" B4 U
4 a$ k% T/ g1 e首先要安装这两个模块( W2 f4 _( O7 G* S$ z" ]( k
4 M Y! U8 Z: J1 f
; g5 ?3 F# m6 Z9 Q V5 d! }import jieba/ I) b7 s- c2 v0 @. r% f {0 ^6 z
import wordcloud
0 ~) Q' u7 \8 ?& s1
7 B/ y" r: R* r$ K. b2- e- w4 e N6 G* j- U- x$ H( h
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
6 V+ N* x8 d% ^$ i" s( Y8 d
; t. u0 [" d7 z) R9 z( r _% a$ v" \9 C$ {& j5 @ l' Q0 t6 V
f = open('弹幕.txt', mode='r', encoding='utf-8') E& d' M) `- w
text = f.read()
- i6 \8 n ~# M# ?6 A; t3 o& htxt_list = jieba.lcut(text)# J' W1 n |, r3 _
# print(txt_list), H6 G3 g0 e( ~
1; _6 G1 i# [: u: h; R0 t+ }5 R
22 U+ x; z% @. e+ g5 J* ~) W
3, ~1 p- }( L4 e4 c! k' k, `# m* p
4- [4 n3 ?; w! c3 V/ s& f- `
列表整合成一个字符串
8 D4 j& |5 h, [& `4 A# }" ]) |$ D
, U' c2 g6 `1 m @1 a! T; }& V: [6 @
string = ' '.join(txt_list)5 R- A7 d+ C! `% F3 G X
print(string)
: {; u; t: |4 U) M7 zprint('---'*50)
, d& w6 c5 O9 ?+ X6 r% V! l Vprint(str(txt_list))8 {" ]6 X3 n1 s' v& j( s5 v
1
% T1 ?$ v x7 f d" H0 _- y2
' o% v3 U4 d a$ T3
4 z% q/ f, u- Z4" \) g: K) a2 u* j+ @9 S }. k. O
词云图设置
0 t2 v0 k; X4 s4 A2 P
- h; }3 ^& J. r* W# l
( \& h8 o* w' Rwc = wordcloud.WordCloud($ ? w( H; @6 t: @; u7 w
width=1000, # 图片的宽5 K6 m' _# S, R
height=700, # 图片的高
# e; J2 G2 V4 [8 Q2 T* M9 z background_color='white', # 图片背景颜色2 n- o( ]- N' F0 D j
font_path='msyh.ttc', # 词云字体
( C! t8 P# J+ w- z$ F, ] # mask=py, # 所使用的词云图片
* Q: \* B, E! s- O scale=15,
( b" E; V: P, u% t% R; J # stopwords={words}, # 停用词
1 y- W h3 Q" m- h( a! I # contour_width=5,6 Z. `5 K1 r, H% U! L" [1 F4 l
# contour_color='red' # 轮廓颜色
' J/ A0 G/ u! m0 d! G)
, M; E1 @: [6 c J9 j( W2 |1
8 I' z% m/ W$ R) c A2
/ ^2 A* a$ L" c+ O% s5 N3- m9 f% |; [% @+ o5 d5 }: f
4
# y6 [4 c3 o! t6 Z' n5
; N0 n$ t* U% \+ f+ ]# D68 f3 F x$ ?5 f
7/ c; q) V* c# G% w) v( V
81 _. ~+ M/ B! O1 Q6 p3 ~+ M8 w
9
7 \! ~/ i1 I6 E0 _6 V) F10
a P. K H% l+ n3 L8 U4 C9 ~# s! a11
; U7 K! F _( A7 r& U d给词云输入文字6 q# l {9 g# F$ _9 J6 Q& K
1 X* G' U. V& F; K& [* u! b
& ?; d" y- C1 h4 N- Mwc.generate(string)
f: O W- ^3 U9 o( P' v; l; B12 M$ S5 B/ c" g) z
词云图保存图片地址
! V r+ p) a L: r# x i4 e- C4 N; J* L* O' q/ F9 B& Z0 ?
: i9 p* s- W! N1 Y2 K2 I0 D Qwc.to_file('output1.png')
: s* ^1 u+ S- V( w1; Z2 _- G" Z- `7 G( F
词云图的过程中有点慢,大家不要心急+ m; b& H7 J( L# v5 \% E4 W* m; B6 a
; `* ~& e5 H* U1 E' l+ a" b( f( O& g- Y* [) K z
这是最后的结果
$ I9 c6 b+ k6 G) V2 P5 Z6 @' a, b4 K: ]2 B P
7 ^( s2 R* V- Y
没有加停用词,所以一些无用的词比较多
) u* c. A$ s& W3 E$ m R) n' o1 ~+ y) y2 v" v
% T" v+ m) @7 wstopwords={'了', '啊'}- {: m! W, g! S! E- p+ y
1! K( r1 k+ X h. w k
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。' ~+ i' k8 M9 d) K0 Y
我们再来看下
$ C d5 q9 v9 x5 t Z7 R, {
5 E! ]* i. a0 b+ V' ~
0 S' ~7 y" P% u4 D: z不知名网友:666666 牛批 老哥我要学!!!4 \9 s9 q% R& w* z3 |) K
2 N9 {+ ^& i) I5 A$ L& u8 g% ^! }
* u0 z- p F' Q
# D7 D% x" j; ^! r9 v3 \, Q% N2 p; {8 P' w5 Z6 Q; n
————————————————/ j7 e2 d/ U2 u" z
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% X/ X( u) ], R9 ]% T" w) G
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119077 J6 p X; b J5 ~- e+ b: O3 j4 k
4 Z S! ~4 ~) e& u/ {5 Y
X& e6 s: t; j |
zan
|