暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python | 微信朋友圈,备份【数据】与生成【统计报表】

Nephilim 2020-04-18
73

(注:本文内容仅供学习)


在日常的生活中,微信是我们比较主要的社交与沟通工具,而微信的朋友圈也存储了我们多年的生活点滴与记忆。

但是,由于微信是一个手机端的APP应用,因此,我们无法像PC浏览网页一样,很方便的将发布在朋友圈里面的记录另存为到本地,只能每次都联网才能翻阅;并且,官方也没有推出类似的微信数据导出的功能,因此并没有办法将自己的微信数据另存下来,以便随时翻阅。

总结一下,当前的微信朋友圈的功能还有以下的不足:

  1. 微信数据无法导出

  2. 微信数据无法搜索:比如,我2013年发布了某条朋友圈,我记得其中的几个关键字,但是我无法检索

  3. 对于较早的微信记录,查阅很困难:比如,当前时间是2020年4月,我如果希望找2020年3月的数据,可能手机上翻几个屏幕就可以找到了;但是,如果我希望查阅2009年的数据呢?那我就要不停的上翻屏幕才可以看到,并且要是这个过程中退出了朋友圈的画面,那就要从头开始上翻了,... 非常麻烦

  4. 微信的数据无法统计:现在过年的时候,类似支付宝或者抖音这样的APP都会推出年度使用报告,但是微信的朋友圈并没有类似的统计数据的图表;因此,你无法知道过去一年中,你的朋友圈中,你个人的朋友圈发布频率,哪位朋友对你的发布的朋友圈的点赞是最多的,哪位朋友对你的评论是最多的,... 等等


介于以上原因,通过Python编写一个对朋友圈数据保存与分析,并且自动生成统计报表的程序,就有了需求。


01

涉及到的Python模块与知识点


编写这样的脚本,你需要以下的前提条件:

  1. Android SDK

  2. Appium

  3. Python 3.x

  4. Python模块:

    1. appium

    2. selenium

    3. ppadb

    4. pymysql

    5. collections

    6. matplotlib

    7. pyecharts


其中:

Android SDK,提供了PC访问安卓手机的ADB通道;

Appium,为模拟人为操作手机的动作提供了可能;

Python,可以组织我们爬取与分析朋友圈的逻辑与动作;


02

Python 数据备份脚本


数据备份脚本源码发布在:

https://gitee.com/leviathan-litan/Discovery_WeChat_Moments


该脚本需要修改四个地方的变量:

    device_serial = "你的设备序列号"
    self.wechat_account_name = "你的微信账号"
    self.wechat_account_password = "你的微信密码"
    self.path_wechat_pc_root = "D:/android_download/"
    run_wechat.wechat_moment(someone_name="你要爬取的朋友圈微信")


    说明:

    1. 设备序列号:

    首先,将你的安卓手机通过数据线插在PC上;

    然后,打开安卓手机的【USB调试】或【安全USB调试】功能;

    最后,通过以下命令获取:

    adb devices


    2. 朋友圈数据在PC上的存放路径通过参数:【self.path_wechat_pc_root】控制;


    运行脚本前的说明:

    运行脚本前:

    1. 打开ADB的【Server】:

      1. 命令行(CMD)运行:adb start-server

    2. 打开Appium:

      1. 命令行(CMD)运行:appium

    3. 确保手机剩余空间足够:

      1. 如果你的朋友圈中的发布的记录中的图片或者视频较多,那么你需要确保手机剩余空间的足够;

      2. 因为,我的脚本首先需要将你的视频与图片保存在手机端本地,然后再通过【adb pull】发送到PC端;因此,手机端的空间必须足够;

      3. 比如,我的朋友圈数据较多,而且图片与视频较多,所以,我运行脚本前,需要保证手机端有【8G】的剩余空间;


    在该脚本运行完成后,你会看到你指定的保存目录下的状态是这样的:

    大小:


    03

    在MySQL数据库中创建对应的表


    在继续分析上面保存的数据之前,首先要在MySQL数据库创建对应的表,用于存放【分析脚本】分析的结果;

    创建脚本:

    https://gitee.com/leviathan-litan/Analyze_Wechat_Data/blob/master/MySQL_create_tables.sql


    其中涉及两张表:

    1. wechat_records

    2. wechat_record_detail_pingluns


    wechat_records表,存放了某条朋友圈的总体信息,包括:

    是否有文字部分

    包含了多少张图片

    包含了多少个视频

    包含了多少点赞

    包含了多少评论

    某条记录的发布时间


    wechat_record_detail_pingluns表则是某条朋友圈记录的评论详情,包括:

    哪一条朋友圈记录?关联wechat_records表的records_id

    这一条朋友圈记录的评论中有谁?

    这些发表了评论的人,分别针对这一条记录发表了几条评论


    当后面,跑完了分析脚本后,这一部分的表的状态是这样的:

    wechat_records:

    wechat_record_detail_pingluns:


    04

    脚本:分析保存的数据


    分析脚本:

    https://gitee.com/leviathan-litan/Analyze_Wechat_Data/blob/master/Analyze_WeChat_Data.py


    该脚本需要修改这几个部分的变量:

      self.MySQL_connect_address = "数据库连接地址"
      self.MySQL_connect_user = "数据库用户"
      self.MySQL_connect_password = "数据库口令"
      self.MySQL_connect_database = "默认连接schema"
      self.storage_base_directory = "你下载的微信数据在哪里存放"
      self.wechat_author_nick_name = "你下载的微信数据的作者的昵称"

      跑该脚本的前提条件是,存在之前【采集脚本】另存为本地的数据;

      05

      生成统计报表的脚本


      生成统计报表脚本:

      https://gitee.com/leviathan-litan/Analyze_Wechat_Data/blob/master/WeChat_Data_Echats.py


      该脚本需要修改的变量:

        self.MySQL_connect_address = "数据库地址"
        self.MySQL_connect_user = "用户名"
        self.MySQL_connect_password = "密码"
        self.MySQL_connect_database = "默认Schema"
        object_page.render("wechat_finally_Page_render.html")


        最后的【render】,指定的是你统计报表生成出来的文件名称;

        而切面的数据库的连接信息,需要与上一阶段,分析报表存放分析结果的数据库的连接信息一致;


        最后,生成的统计报表如下:

        图1

        图2


        06


        至此,对朋友圈数据的统计,完成。


        文章转载自Nephilim,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论