All Projects → by-syk → CoolapkUserStats

by-syk / CoolapkUserStats

Licence: Apache-2.0 license
酷安用户数据爬虫案例 A Python sample to get all user data of CoolApk

Programming Languages

python
139335 projects - #7 most used programming language
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Labels

Projects that are alternatives of or similar to CoolapkUserStats

sakura-dmhy
Sakura - 一个简单的工具
Stars: ✭ 29 (-6.45%)
Mutual labels:  coolapk
coolapk-cli
[EOL]酷安命令行版,因为懒得开网页而生
Stars: ✭ 19 (-38.71%)
Mutual labels:  coolapk
Coolapk-UWP
一个基于 UWP 平台的第三方酷安客户端
Stars: ✭ 1,633 (+5167.74%)
Mutual labels:  coolapk
Words-away
防止文本的敏感词检测 - Prevent sensitive words detection of text.
Stars: ✭ 224 (+622.58%)
Mutual labels:  coolapk
CoolApk-Console
Mobile-friendly Coolapk developer console
Stars: ✭ 34 (+9.68%)
Mutual labels:  coolapk
MIUIAnesthetist
Cut out those cancer apps on MIUI painlessly with the help of this Xposed module.
Stars: ✭ 91 (+193.55%)
Mutual labels:  coolapk

酷安用户数据爬虫案例

背景

酷安」是一个成长中的优秀国内应用社区。截至目前(201705),注册用户数在100万左右(当然,活跃用户并没有这么多)。 为了满足自己了解酷安粉丝数排名情况的好奇心,以及学习实践 Python,于是写了这个小玩意儿。

酷安

酷安

在此之前,已有酷友 @unnamed5719 基于 Python 实现对酷安全网用户的爬取分析,同时也开源了他的代码以及分析结果。(去查看:酷安大数据(伪)) 而这个小项目也是在其启发之下完成,感谢 @unnamed5719!

分析

每一位注册酷安的用户会获得一个唯一的ID,这些ID从10001开始依次递增。

如何获取每个用户的数据呢?有两个方案:

    1. 解析酷安用户网页

    http://www.coolapk.com/u/{uid}

    http://www.coolapk.com/u/{uid}/album

    HTML

    1. 调用酷安APP的API

    https://api.coolapk.com/v6/user/profile?uid={uid}

    API

比较:

方案一 方案二
速度
信息量 少(用户名粉丝数动态数关注APP数发现APP数 多(除方案一提及的,还有性别应用集数等)
其他 接口需要的X-App-Token值难于构造

这两个方案,均已实现。以下仅以方案一为例进行说明。

获取的这些数据包括用户隐私信息吗?

不会涉及到酷安用户隐私。抓取的这些数据均为酷安已公开的用户数据。

准备

运行系统:Ubuntu 14
数据库:MySQL 5.5
apt-get update
apt-get upgrade
apt-get install mysql-server
apt-get install mysql-client
CREATE DATABASE coolapk;
USE coolapk;
CREATE TABLE user(
    id INT PRIMARY KEY,
    name VARCHAR(64),
    fan INT DEFAULT 0,
    feed INT DEFAULT 0,
    app INT DEFAULT 0,
    find INT DEFAULT 0,
    time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);
开发语言:Python 3
apt-get install python3
apt-get install python3-pip
pip3 install pymysql
pip3 install sqlalchemy

GO!

以每次处理10000用户的节奏,进行100次执行。

python3 coolapk_user_stats_via_htm.py 10000 10000
python3 coolapk_user_stats_via_htm.py 20000 10000
python3 coolapk_user_stats_via_htm.py 30000 10000
...

过程

以腾讯家的云服务器(配置:单核/1GB/1Mbps)为例,

  • 每秒平均处理10.2个用户
  • 每个用户平均消耗13.14KB流量

那么,按酷安百万用户计,

  • 大概耗时1634min(27h)(单机单线程)
  • 大约消耗12.5GB流量

如果使用多台机器同时跑,可在数小时内完成。

结果

以下统计基于 2017-05-19 - 2017-05-23 时间段采集的数据

用户数
SELECT COUNT(*) FROM user;

注册用户数:965289 97万

SELECT COUNT(*) FROM user WHERE fan = 0 AND feed = 0 AND app = 0 AND find = 0;

沉睡用户数:403651 40万,占比42%

评分排名TOP100

设定评分计算规则:

粉丝数 动态数 关注APP数 发现APP数
权值 0.50 0.40 0.08 0.02

各项权值由我个人随意设定,因此以下数据仅供参考。

SELECT
    @rownum:=@rownum+1 AS '#',
    CONCAT('[@', name, '](http://www.coolapk.com/u/', id, ')') AS 'user',
    FLOOR(fan * 0.5 + feed * 0.4 + app * 0.08 + find * 0.02) AS 'score',
    fan, feed, app, find
FROM
    user, (SELECT @rownum:=0) temp
ORDER BY
    score DESC
LIMIT 100;
# 酷友 得分 粉丝数 动态数 关注APP数 发现APP数
1 @酷安小编 8860 15374 2869 179 595
2 @八百标兵 7727 12784 3193 424 1205
3 @辣椒爱上水果 5761 11509 16 5 0
4 @夜之浪子 4189 2144 7747 53 724
5 @pandecheng 3146 2720 3072 6836 535
6 @tastypear 2989 4778 1478 16 383
7 @尘封之泪 2984 5661 384 4 0
8 @阿酷 2706 4396 1255 44 162
9 @zesty 2695 3113 2741 2 2114
10 @小浅丶 2349 4637 76 4 1
11 @柚木舟 2318 4500 155 82 0
12 @Fince 2122 864 4003 1109 24
13 @various 2056 4054 64 41 9
14 @fkzhang 2053 4058 60 0 0
15 @DBin_K 1941 1278 3214 193 90
16 @黄福林 1743 2593 1117 1 7
17 @iKirby 1734 2470 1008 1192 24
18 @绯色の炎 1626 281 2851 4313 16
19 @zhou45 1566 3101 41 0 4
20 @lyh123 1447 488 2671 1608 298
21 @feemo 1404 1162 1925 506 641
22 @没有密码找回 1345 2646 55 1 1
23 @Hiapkangel 1334 1712 1160 176 7
24 @EMK2000 1279 692 2276 95 772
25 @西瓜菌 1278 1597 1161 182 61
26 @婷媌 1247 2354 176 2 5
27 @哈尼小姐姐 1237 2263 245 105 1
28 @阿明1975 1197 103 2760 1 2075
29 @Brevent 1179 2334 29 5 1
30 @PandaTV 1177 2184 156 286 8
31 @Trumeet 1174 2073 181 820 5
32 @微信撩骚 1163 115 2722 212 11
33 @veryyoung 1153 2289 21 5 5
34 @狐狸等花开 1139 2269 13 0 0
35 @手谈姬 1139 2211 84 0 7
36 @By_syk 1127 1750 571 289 32
37 @suesyria 1126 563 1807 1353 702
38 @少女的酥胸_ 1090 2023 198 1 1
39 @Aviraxp 1027 1390 829 2 33
40 @顾挽歌 1025 2007 51 15 1
41 @狼大 1023 1825 222 279 0
42 @Pandaria 1020 1899 177 7 4
43 @千舞梦三 1019 302 2132 89 415
44 @风澈 995 1952 27 107 1
45 @llllllllllll666 964 621 1591 207 34
46 @讞諳 961 1289 746 166 255
47 @茶杯 934 1327 666 15 160
48 @维生素茜 933 226 1961 446 27
49 @SDRAGON 924 1742 60 370 3
50 @科学松鼠会 911 360 1793 87 377
51 @atony 904 1382 514 75 70
52 @wuxianlin 902 1793 15 1 0
53 @Time_ 901 1730 92 1 0
54 @LetITFly 896 1791 3 3 1
55 @noear 893 1206 725 4 5
56 @liubaoyua 884 1408 420 147 33
57 @Kanmurimori 883 402 1502 994 122
58 @QQ2223274676 848 33 2064 82 3
59 @tyzrj766 846 26 1952 654 8
60 @Dr_Pure 841 290 1714 118 79
61 @小李熹熹 841 1665 21 9 0
62 @虎小八 839 609 1209 640 4
63 @tieaa 838 681 703 2640 259
64 @潇湘夜雨缘 837 1513 174 137 6
65 @一字 828 42 1988 129 103
66 @寒歌 808 1244 464 11 1
67 @martincz 795 1526 79 4 4
68 @初音是谁 791 292 1497 564 73
69 @Leon连续 789 1563 17 13 2
70 @haseoxth 787 74 1843 154 66
71 @囧机油aprilone 783 116 707 5536 0
72 @solovid 781 21 1911 70 41
73 @风居住的街道 774 1432 82 324 1
74 @八雲紫 769 386 1438 3 59
75 @iVanilla 756 529 1227 11 6
76 @zfj012 753 1188 200 996 2
77 @少侠就是我啊 751 102 1610 700 18
78 @一纸希壁纸控 750 642 1069 20 2
79 @我是笑话 745 200 1573 193 49
80 @Android_L_User 739 1236 303 2 8
81 @郁闷人 731 378 1344 61 10
82 @UBIKS 723 897 665 96 83
83 @苏阿墨 718 23 140 8134 0
84 @安卓大帝 717 574 1075 0 10
85 @mooooo 712 111 1631 43 56
86 @xyphillipyx 698 1220 216 15 24
87 @yuki918 689 1172 258 0 3
88 @n5202853 682 1305 5 346 9
89 @丿魸 680 101 1489 409 81
90 @chendeshen 677 18 86 7924 4
91 @lqmouse 674 6 221 7292 0
92 @Misaka9903 664 1163 167 195 6
93 @七曜之律 663 327 1138 528 128
94 @酷宇小编 662 33 1581 167 1
95 @gujiangjiang 659 39 1596 19 24
96 @fairyex 658 1250 82 2 2
97 @Resume 654 941 456 3 56
98 @蓝莓味绿茶 653 966 422 25 9
99 @Kiriya 653 160 1306 631 15
100 @zjszjs 648 23 1130 2311 0

我是第36位,哈哈。

如何在数据库中查询指定用户的评分情况?

SELECT
    *
FROM
    (SELECT
        @rownum:=@rownum+1 AS '#',
    id, name, fan, feed, app, find,
  	  FLOOR(fan * 0.5 + feed * 0.4 + app * 0.08 + find * 0.02) AS 'score'
    FROM
        user, (SELECT @rownum:=0) temp
    WHERE
       fan > 0 OR feed > 0 OR app > 0 OR find > 0
    ORDER BY
  	  score DESC
     ) stats
 WHERE
     name = 'xxx';

在线速查(服务将于2017年06月关闭): https://coolapkuserstats.by-syk.com

License

Copyright 2017 By_syk

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Copyright © 2017 By_syk. All rights reserved.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].