- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563319 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174219
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
1 e/ g. e# y$ U$ W4 ~$ }, Q( p
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
I3 U) N% I; V$ N0 R( A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
& b2 r3 ^7 k5 l6 Y7 W康康大家都怎么说!; S4 R2 @- ~; O' |: [
$ X/ R5 ~1 n( [% y3 ~4 `1 x
/ z6 b) L* z2 O+ n7 R" M) u
5 G: A6 p) N }/ ?2 z7 o- o7 a
5 T" B* }, J9 h* ?' t/ o开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。7 r) W: a/ {, _, S
7 {$ X O& b# z+ Q. f+ u8 t) @
" f7 X& d+ d) p+ C, o0 t" g" i如何安装模块:
. ^( z) C- M* Q9 |8 ~
0 y1 p, \$ \8 e8 R$ H
' V, [# ]" F2 a. Bwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
, U) f$ y" L( j% q Kpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
) a" ]% _* l Z; {如果模块安装失败了,可能是这些问题:
5 o! b- w! v# R: L- Q7 p
9 r& B: |# K1 W1 w$ V+ s" _1 S. L2 Q/ F! p1 L7 {3 P
提示:pip 不是内部命令
( ?- a5 k3 R+ w' |你python环境变量可能没有设置好5 a" J# K6 z" I9 @1 A
有安装进度条显示,但是安装到一半出现报错了 C4 D, e" W& l. z- R7 G' R& ~4 M+ i: r
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
7 D$ |, D; b/ Q1 C7 ~& l) D! v' _3 lread time out 网络连接超时 你可以切换为国内的镜像源* F3 c( ]6 ?% u8 m& f- u
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
9 O# J- I# |' P8 [0 O! c你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
. X' }- E$ W$ A. {3 ^# P可能安装了多个python版本& B& ~ G/ W( l/ Y& H0 Z
安装一个版本即可# s. g$ L1 c! Z+ d/ k/ ]# L
Python做爬虫到底可以做些什么呢?. D1 |' i3 L6 n" C. d3 {
8 W: T& I( x3 H4 t g8 S1 X
6 Q$ T! U/ ~% k0 `# q( r$ u常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
; U4 i( \4 S$ V( Q12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量0 D) S2 c; |7 ~# ?
可以刷课 可以刷网课 自动 还能自动批量注册账号
" p; F! ]# v: S/ V1 O模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
0 s0 g, [8 ~4 `# c& F普通B站视频可以爬 番剧是需要会员的
3 v4 ?( o3 m& R8 V
, z; L$ a% c9 \0 w- E: s% @7 ~
- x9 O+ j$ c" t1 f- L2 y' U1 `爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
5 P2 Y5 N; }1 |. R, D# l
' Q6 Z w4 W& k+ G. x, Y, E U R
: Z! v* j+ m3 ?# I1. 确定目标需求 (弹幕数据 那个视频弹幕)
8 Q1 s4 D- B3 S, N; b 确定了3 @& |" N* K) S" {
2. 找数据 (数据的来源分析)
9 X. f( v( @4 H7 E+ T& [- g 简简单单 找到了( }3 H* r4 p; b# {& O# \$ _
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)1 }) u* t! {/ t0 z
请求方式: get / post
0 j& s* L' o' _ e/ `5 t0 e 请求头:
) }$ R& P" U- H( `5 t* X https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
0 Y( Z) b# s Y' Z( y+ Y (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)+ ^" f0 ]' H4 j4 u* |8 E1 C. o
4. 获取数据
+ D' ~- i" E9 D9 }; s: q 文本数据 response.text 获取网页源代码
/ s5 r m/ O ?7 [. X8 k json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
3 n K$ F; x( r$ X( ~ 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
6 C+ j8 a" I, t$ r' f5. 解析数据( N6 q$ ~: g" n u) w7 m- w" [
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
0 e2 @; I6 e2 B( v' K6. 保存数据+ f% o+ `5 J& G* t8 F; h5 u: i' L9 q
1
; t, z* k; k+ H& o/ D2 E2+ ^5 [. w' o; U0 ~# H
3& ~) c. M: f# N9 g% a
4
" g/ q7 P7 v m* c/ u+ z: o5" W% Q# B6 [& U c+ \3 p1 `: `7 K7 R
6
2 v3 [7 B: H- u, g1 ]! e7* A( u: _2 Q4 D3 }* J
8$ O4 G$ K* ]/ F) Q2 n$ ^. {
9$ O6 b: i$ N' @- a2 c# w
10' b8 }; v' z6 m! S2 E. b
11
' n/ ^2 f0 }9 | @+ x* [0 Y+ R12
, _ W g! w/ T13
$ X2 G% ?9 r2 L* U5 B14
" o1 C( w9 C1 S4 A15
. h& K* v" u7 F% C9 ?: @16
1 W( v, _/ y7 \- f" u) n$ Apython除了做爬虫数据采集,还可以做什么?
& i/ s# ?1 w& w: y兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
% L6 A1 A8 n6 R( `
2 e, b4 j* ?# g9 q' I( F: _$ i2 n8 F/ M+ i$ [0 O+ L2 Q1 m
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K9 G7 A' [3 W8 ^ T2 P( b6 X
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;! e0 B6 A$ e1 z$ K0 I# R2 Z- S6 ]5 ]3 `
我可以做到这样么?) n8 r; g. ^2 a
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;% G5 E# F, e/ |2 A( H
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;* {& e' f' J: B2 Q7 P2 k( _
0 F8 u7 |6 s# Q5 o0 a4 b, W3 ?9 w, m& }% x6 M
爬虫开发(脚本)(就业/外包) 可见即可爬
) e3 O% t7 k, x9 c1 P虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!3 p' F8 V' g$ o% Z2 W, ?: I( I
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!4 _5 e! e6 A, b+ f
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!5 g" A, E4 S2 i! d9 W
: `% s9 _! r0 {( f
6 g+ B8 Q- s6 `; F& w0 I数据分析(就业/外包)+ t4 f4 u% [* B% K! p2 c9 x) h
" \4 ~2 C( @1 \1 S/ o& i4 E
* ^. H# Q* [9 {: u& y, e自动化(脚本), ?' r* @! x( [: y
9 O8 X( ?; S; ^" g. v
8 q! N1 q( B/ b游戏开发/辅助(脚本)
2 Y# t) N" o2 s; k
- M: V' f9 G# Z7 T) ~3 J+ T+ A0 T
人工智能(研究生以上学历 要求很高)
5 o: }. a+ N& n3 g
" ?# N7 n7 R3 U T2 f
1 m& a4 A$ m& @2 {( X% i等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
& s1 m0 [4 r# B# R' x
- D7 c9 p# W* c: L7 y. D
9 B" d5 E4 d5 b# @我们开始正题吧1 @; J3 `5 r0 n$ ^6 S
' E7 q( m, K8 j2 Y- A/ \. {, c* T8 D; W) f u
爬虫部分:$ z$ m: a( p, o3 o; M
发送请求 第三方模块 需要pip install requests3 a. y* ~1 Z' |4 {3 X
* a7 ?* t9 T+ u% G
3 r7 ?* Y' T" L' m2 l$ r6 P! ]import requests
7 q/ ^, m% B( ]& G# i4 J$ f) Fimport re # 内置模块/ Y+ }- v E, F
( J6 d9 \$ f3 W, c9 ~3 T( n& G- I9 Z
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'3 b a$ f6 j/ q* L9 C9 W7 {
1+ F( t& T; d+ h; Y' u7 p" {4 S W- e
2
$ u' Y( d) c. x B) _; s* E3) q' l# K1 ^+ `1 n! J
4) L" W+ S0 j& L1 M, d3 P- {2 l( ?
请求头的作用就是伪装7 h1 C2 s6 R6 {, q" {1 k" ?
$ @9 j! G2 y$ K7 T0 A; X3 q& u" i" q; {* Y/ ^: d
headers = {0 I; `8 C' q, g2 x/ X, D
'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 T0 C: Z0 q* V9 F% ]& E( l/ ]}
: s5 G- ]/ c9 E- P( P, S: \1; k: y- b/ O$ d5 H5 Y" d, r0 C! m
2 ^0 x% {# q% ^6 W: p( C
3
) T i1 L0 y: T/ L模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
! j' f3 W7 A$ s& I) B' @1 i; b函数传参/ T+ C( k. U" Y3 V8 |8 X
1 Q$ Y& \) t9 ?0 G* }* [
4 @8 }& T1 ^! R
response = requests.get(url=url, headers=headers)0 K+ r& q, e+ A
1 Q7 d# X0 r3 W! s
<> 对象 对象意味着你可以调用里面的方法或者属性8 J/ T) z7 E6 O$ O
200 状态码 请求成功
+ A) h% L; e8 m* t0 J0 m; b获取数据 文本数据
, D1 M, D/ p. d# W1 [自动识别编码
, o' \1 t( Z$ i5 z
8 L( D) R9 H5 V' Z. Z1 V
, I) [ |# i+ Q+ W- b3 Sresponse.encoding = response.apparent_encoding0 P$ u; `' @3 L0 j/ z
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)/ i( D) E$ o( {. v z& T
1# g5 i2 s3 O0 d4 b* @- m
2
: j, y: t6 T* fcontent_str = ‘\n’.join(html_data): `( v4 K* I3 C
( }4 h9 p. G8 _" @# M) D8 I, J
0 W# x3 `9 {; }) N
要列表转成字符串 ‘’.join()& Z [4 e, e3 p0 J7 U0 Y& T6 B
for 遍历4 Q1 I' j$ I. q& a8 m6 {* c+ R
保存数据 保存字符串
$ p# O: A7 F o/ {for content in html_data:3 ]$ Y' n. u* F
# mode 保存方式 w 写入会覆盖 a 追加写入- P! Y) V) W$ a9 J/ i( B, R
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
* V" o) Q4 W& J5 p Z' P( B% A f.write(content)
/ d8 v4 b0 M( A' W f.write('\n')
x0 L$ }- z0 k, F9 {9 t* t7 G; s5 Z
: Q$ [" ~6 O" @
4 J) w3 s; l& \1 }2 D# print(content_str)8 W- z3 e- I, h% F/ ?1 z
11 I) w+ t1 ]. l5 }5 x. V
2
' ~1 A/ j2 V1 W3
& G* Y/ C$ s% R6 J2 x2 d43 U$ D6 ?/ y5 W/ ?) s( \- c' Q7 v" K" ]
5
# f3 `5 M6 A8 J61 ]8 f' C/ v! w. |# x% Q
73 V0 Z( d5 N3 S/ R4 T4 q/ K
爬取结果
6 ^. L6 t+ x2 x6 c. t2 K9 i- S! _+ ?# n' _
& D; \$ e( i6 D& I9 U6 u# i$ |' `# z9 W' a5 g* ~5 J
s. R3 N: K0 c P% H y然后我们再来实现制作词云图部分
) N" c8 ], }0 k; t$ A- S
. x9 W6 F0 F ?- x, e9 h, V# L2 F0 F5 W
首先要安装这两个模块7 G$ h0 p" V6 J: N% K
a) r6 I& F5 L( a L
; ~. c- Q- d0 L) r+ C' m) ^4 K% |import jieba h9 N" p/ y/ x! v/ L8 g
import wordcloud
' f, y0 ]8 N* }, t10 K% @& `( k X7 \- m% C
2, S9 F: d/ e+ n% [- h6 `
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。- h6 ~. Y4 Q, A/ m
, x3 d5 C" c4 I7 w
! t, R4 Q6 U# z( w0 Kf = open('弹幕.txt', mode='r', encoding='utf-8')
# `- ]0 Y H. h) I% W Y z! xtext = f.read()
. R6 A% w% }4 z; Jtxt_list = jieba.lcut(text)* l$ E. B, T: ^ O6 I
# print(txt_list)3 f9 Q0 }) F7 ]( q
1, a+ y/ g" H% A! Y
2
6 v( Z) L- D# E; t( S3. }1 F& s& Q d; P8 x
4+ q- E6 z2 R* w5 ]% g r) {
列表整合成一个字符串. Y# d) a& v3 c9 s9 q4 d# l$ U
' v2 f# P$ f& y# H
0 [/ |+ b' C9 I4 s
string = ' '.join(txt_list)3 d% |: n3 H, o5 _! R7 W1 u
print(string)
! r7 c( Q5 g1 S8 c. x0 S& Mprint('---'*50)
( u& K9 D* X$ I$ F# x; p1 O3 eprint(str(txt_list))8 g$ B. A) X0 ?9 C; T5 x* W
1
c$ Q7 @. |6 Q: h8 p: d0 r: X2
* F1 G# o% k+ L3
6 m2 K4 Q+ T/ b# |2 \4% f6 f0 S7 s Y& n. c, x" M
词云图设置
6 h8 n2 W1 X1 C8 X. t$ Z8 y. u
3 F, @' |8 F, k, { M+ k1 t
0 I. s- O1 a* z( |wc = wordcloud.WordCloud(9 r( a+ Q3 U6 U4 O
width=1000, # 图片的宽4 s N( D6 I+ t; K1 i+ v1 b
height=700, # 图片的高 ?& i I; _8 f+ M, v, k5 \9 Y' Q
background_color='white', # 图片背景颜色9 I. K8 Z8 o1 X
font_path='msyh.ttc', # 词云字体6 v: T0 ]7 H2 y: L( ^2 X- |
# mask=py, # 所使用的词云图片
1 q6 f1 K9 A) g2 T$ W" k$ _ scale=15,8 k' j# ^ {; r1 D* y9 J
# stopwords={words}, # 停用词
+ I4 P! C2 P) j # contour_width=5,7 N; |: K4 u$ n+ d7 O2 D- O
# contour_color='red' # 轮廓颜色# W4 t" D$ ]/ Y! T( c2 M+ t- X
)
: S8 K" y9 X, Z, h1
! J4 X# G7 C1 ~8 \' |* H# r2
6 d7 m! [$ m1 Y3 _) N3
' r o( S8 D2 J( k. w4& d' s0 e$ A& Q# y/ W) m
5
" y" C0 A1 m. K! c6' g' L+ U" D% e: H$ y, F* h6 g7 X Y
7; x* Z7 h$ P7 ~1 b# f& t! N
8" S% {1 W6 W" R z
9) {6 |: S/ a t, e
10
: l" `' v4 O0 r11 J& `7 P' L9 X9 x# a* K$ E v# _3 ?
给词云输入文字3 F, w s6 m( |! U/ p. O* x
6 S* Y" m. x; W2 |. z# y7 d4 S1 d2 Z, h* u2 \
wc.generate(string)3 k( s+ @; E0 r, r5 @
1% b4 s( x. I, Q* v
词云图保存图片地址
* j" G5 ~5 ?, {+ V. g) y- z
- g/ G# B' V/ F0 X; ~
: K h2 C7 y& ?3 m9 e" q, G2 }wc.to_file('output1.png')3 i; J4 ^. S* e8 v9 n# p
1* I' Q. a8 N. D) {! K
词云图的过程中有点慢,大家不要心急
, B3 j6 n" S! Q2 X% A8 Q9 w3 L
6 l2 d/ x. v/ {/ Y. v- S5 O) ?
这是最后的结果
8 I* i2 c% Y# W' C8 }4 n0 o' O" t% U( e3 A
( V" P" @) ^8 z# n
没有加停用词,所以一些无用的词比较多8 ^# R8 o9 Z8 m$ I8 s
7 `% d2 S: v* ~5 n7 b
- u9 j, h5 j" x1 B# Ostopwords={'了', '啊'}
! m& x( f2 ]2 o2 e16 w0 o, K l. ~ p7 m! I
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。+ C9 I" G# \7 A1 L a# K7 U3 D
我们再来看下
6 F: z' h4 j/ _" ? x7 f/ G6 h- \/ z/ h( U4 f
' h( z2 K& r3 |: N: U0 `0 n: ?. n7 N不知名网友:666666 牛批 老哥我要学!!!5 R% {* U; [0 b4 b1 Z6 A( r; b
, T* x9 y* k) u. h, a; m9 [
: ?5 }" S2 i. Y# @7 P ~% [6 u$ [' Z; |2 w
4 P% M" O/ n7 ^————————————————: T& ^1 r' q, S( A2 N% X
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" W+ r7 f8 f0 e% s+ W
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119074 }- |* ^5 q7 l/ Z0 B: Y- `
, O% Y: B3 @4 c) v% g4 h
c+ _6 Z9 L) G8 t |
zan
|