你是否:
- 爬虫获取到的动态变化的数据,没有可视化的监控
- 动态数据需要加工分析后的结果分享给团队里的小伙伴
说人话版(以微信接口为例):
微信运营的同事:“老王,提个需要啊,希望能每天早上9点更新一下微信的昨日数据,最好能够有几个竞品的传播数据,我们早会的时候讨论用。”
老王:“噢,那传播数据是指什么啊?”
微信运营的同事:“我想想,比如分文章位置的阅读量,点赞量啊,再计算一下本月累计值吧,看看我们这个月完成目标还差多少……”
老王:“能不能再具体点?或者给出计算公式bla~ bla~”
微信运营的同事:“恩,要不你先用这一两个试试。我们先用用看”
老王:“好吧,那你们大概什么时候要?”
微信运营的同事:“今天,反正尽快吧”
老王:“ok,那我明白了”
这个需求在工作中还是很常见 分析师需要将数据按照需求方的可能的需求整理好,并且用一种易于使用可探索数据的方法展示出来。
下面我们就来拆解一下吧 [^ _^]
- 定时任务完成抓取、清洗,数据入库(mongo)
- 定时python 清洗数据,更新mysql
- 制作tableau使用模板
- 使用模板跟踪数据,持续优化
注意事项
- 区分mongo 和mysql的读写账号(建议给mysql一个单独爬虫更新账号)
- 清洗完数据之后写入mysql,选择全部重新写入还是更新
主要流程
- 从mongoDB取数
- 更新mysql
from sqlalchemy import create_engine
engine=create_engine("mysql+pymysql://【mysql的爬虫专用更新账号】:【账号密码】@【服务器地址】:【端口号】/【DB名称】")
# 删除--mysql表【需要给删表操作一些时间】
cur = engine.execute(
"DROP TABLE【表名】"
)
time.sleep(10)
# 更新--mysql表(DataFrame数据量少还好,要是多的话不建议这么做)
jijing_data.to_sql("jijing_data",engine,index=True)
# 读取--mysql看
#查询语句例如:'''select 【列名】from 【表名】;''' 【注意符号】
df = pd.read_sql_query(【sql查询语句】, engine)
- 完成tableau模板,给自己的仪表盘监控数据更新异常
- 完成定时任务的添加
- 按照运营同事的需求调整tableau(沟通不断迭代)
总结
- engine的确定需要5个要素
- python操作的读写更新删除
要不是mongo对json支持的好,要不是tableau连mongo太麻烦我才不会这么折腾呢,希望有更好的解决方案
可以参考下试试
python中pymysql模块操作与使用
利用python 实现快速插入300万行数据