爬虫世界

用Python数据分析来薅一下微信公众号

2019-05-04  本文已影响19人  c067527d47c2

通过抓包软件Charles获取请求信息,得以获取公众号数据。

本次只获取公众号文章的部分信息。

对于文章的阅读量、点赞数、赞赏数。能力有限,选择放弃。

/ 01 / 获取分析

image
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流群号:984137898 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

公众号的文章接口可以在电脑版的微信上获取。

img

进入历史消息,下滑页面。

img

在Charles中找到接口数据。

img

根据接口数据构造请求,便能获取公众号文章了!

/ 02 / 数据获取

主要是获取文章的标题、摘要、链接及发布时间。

具体代码如下。

import requests
import json
import time


def parse(__biz, uin, key, pass_ticket, appmsg_token="", offset="0"):
    """
    文章信息获取
    """
    url = '?txe_eliforp/pm/moc.qq.nixiew.pm//:sptth'[::-1]
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",
    }
    params = {
        "action": "getmsg",
        "__biz": __biz,
        "f": "json",
        "offset": str(offset),
        "count": "10",
        "is_ok": "1",
        "scene": "124",
        "uin": uin,
        "key": key,
        "pass_ticket": pass_ticket,
        "wxtoken": "",
        "appmsg_token": appmsg_token,
        "x5": "0",
    }

    res = requests.get(url, headers=headers, params=params, timeout=3)
    data = json.loads(res.text)
    # 获取信息列表
    msg_list = eval(data.get("general_msg_list")).get("list", [])
    for i in msg_list:
        # 去除文字链接
        try:
            # 文章标题
            title = i["app_msg_ext_info"]["title"].replace(',', ',')
            # 文章摘要
            digest = i["app_msg_ext_info"]["digest"].replace(',', ',')
            # 文章链接
            url = i["app_msg_ext_info"]["content_url"].replace("\\", "").replace("http", "https")
            # 文章发布时间
            date = i["comm_msg_info"]["datetime"]
            print(title, digest, url, date)
            with open('article.csv', 'a') as f:
                f.write(title + ',' + digest + ',' + url + ',' + str(date) + '\n')
        except:
            pass
    # 判断是否可继续翻页 1-可以翻页  0-到底了
    if 1 == data.get("can_msg_continue", 0):
        time.sleep(3)
        parse(__biz, uin, key, pass_ticket, appmsg_token, data["next_offset"])
    else:
        print("爬取完毕")


if __name__ == '__main__':
    # 请求参数
    __biz = '你的参数'
    uin = '你的参数'
    key = '你的参数'
    pass_ticket = '你的参数'
    # 解析函数
    parse(__biz, uin, key, pass_ticket, appmsg_token="", offset="0")

最后成功获取文章的信息。

img

接下来根据文章的标题、摘要及发布时间来做一些分析。

文章链接主要是用于生成PDF。

这个放到下一篇文章再说。

/ 03 / 数据可视化

01 每年发文数量

img

2016年数量最多,17年和18年下降趋势明显。

这一点曹将也曾提过,工作变得越来越繁忙。

为此,在18年的时候还招了几个助理。

我肯定是没那实力去当小助理,还是老老实实写自己的代码吧...

02 每月发文数量

img

这里是统计了所有年份的数据,下面还会有一个按年份来展示的图表。

其中12月最多,不知是为何。

难不成曹将天天写年终总结报告的PPT教程吗,哈哈。

03 每年各月发文数量

img

可以明显看出15年和16年居于17年和18年之上。

这也与第一张图相对应。

其中15年的12月份发布了30篇文章,也就意味着曹将天天在写文章。

三天一更的我,着实有点惭愧。

04 公众号发文时间

img

发文时间主要集中在晚上,早上7点也有一段小高峰。

根据这一两年的情况,大多都在晚上发布。

所以猜测7点发文,应该是前几年的数据。

05 文章标题长度

img

标题对于文章的影响可以说蛮大的。

这里只研究一下曹将的文章标题长度,主要集中在10-20字之间。

也给自己日后写文章标题作为一个参考。

讲真,曹将起的标题真不错,值得学习。

06 标题和摘要词云图

img img

这里便能看出曹将公众号到底在讲些什么。

之前看过一篇分析曹将和邵云蛟的文章。

里面说曹将的文章偏职场,邵云蛟则更偏向于PPT。

这话说的一点毛病也没有。

/ 04 / 总结

本篇文章未完待续,完整代码下期再见。

毕竟文章链接获取了,那么必定需要将其存到本地学习。

所以下一期讲一下如何将网页存为PDF。

另外圈内的大佬,文章也很不错,大家也可以自己动手。

比如「程序员小灰」的漫画,「五分钟学算法」的趣味算法。

思路有了,剩下的就靠大家自己了。

上一篇 下一篇

猜你喜欢

热点阅读