Python 之微信指数小程序数据抓取

news2024/11/15 15:51:40

Fiddler安装和设置

安装

Fiddler 安装包可以从这里获取,如果失效了可以自己网上找一个安装。

链接:https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd=1znv 
提取码:1znv 

然后就是点击安装就好了,没什么好多说的。

启用HTTPS捕获

进入软件界面,点击 Tools -> Options -> HTTPS 启用捕获 https 请求并解密。

设置自动转发

设置指定 url 自动转发到本地,我这里是自动把请求转发到了我本地一个 Flask 搭建的服务,设置好以后进行保存(转发地址记得和你服务的地址保持一致)。

设置自动转发 https://search.weixin.qq.com/cgi-bin/wxaweb/wxindexfluctuations 的目的主要是为了获取数据请求参数中的 openid 和 search_key,因为我需要这两个请求参数去构造新的 body。

开启捕获

可以从 File -> Capture Traffic 开启捕获,也可以用 F12 快捷键开启捕获,当左下角有 Capturing 字样时,表示捕获已开启。

数据抓取处理

搭建并启动本地服务

可以自己在本地简单写一个服务接收和转发的请求并处理。我这里构造了两个 body 去分别获取 指数趋势数据来源

# coding:utf-8
import datetime
import json
import pygal
from pygal.style import Style

import requests
import urllib3
from flask import Flask, request

app = Flask(__name__)

headers = {'Host': 'search.weixin.qq.com',
           'Connection': 'keep-alive',
           # 'Content-Length': '182',
           'xweb_xhr': '1',
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/9129',
           'Content-Type': 'application/json',
           'Accept': '*/*',
           'Sec-Fetch-Site': 'cross-site',
           'Sec-Fetch-Mode': 'cors',
           'Sec-Fetch-Dest': 'empty',
           'Referer': 'https://servicewechat.com/wxc026e7662ec26a3a/53/page-frame.html',
           'Accept-Encoding': 'gzip, deflate, br',
           'Accept-Language': 'zh-CN,zh;q=0.9',
           }


def draw_line(title, time_indexes, last_day=7):
    time_indexes = time_indexes[-last_day:]
    date_chart = pygal.StackedLine(fill=True, interpolate='hermite', x_label_rotation=-20, style=pygal.style.LightGreenStyle)
    date_chart.x_labels = [str(x["time"])[4:] for x in time_indexes]
    date_chart.add(title, [x["score"] for x in time_indexes])
    date_chart.render_to_file(f"line.svg")


def draw_pie(title, channel_scores, last_day=7):
    # 颜色对应关系可以使用 pyautogui 的 getpixel 取色器获取
    # colors_map = {
    #     "ad_score": "#eda150",
    #     "extlink_score": "#a9e87a",
    #     "finder_score": "#f6c443",
    #     "live_score": "#ff6146",
    #     "mpdoc_score": "#7c160",
    #     "query_score": "#4fadf8"
    # }
    # style = Style(colors=("#eda150", "#a9e87a", "#f6c443", "#ff6146", "#7c160", "#4fadf8"))
    legend_map = {
        "ad_score": "其他",
        "extlink_score": "网页",
        "finder_score": "视频号",
        "live_score": "直播",
        "mpdoc_score": "公众号",
        "query_score": "搜一搜",
    }
    channel_scores = channel_scores[-last_day:]
    channel_scores = [c["channel_score"] for c in channel_scores]
    channel_score = channel_scores.pop()
    for cs in channel_scores:
        for key, score in cs.items():
            channel_score[key] += score
    # pie_chart = pygal.Pie(inner_radius=0.5, style=pygal.style.LightSolarizedStyle)
    pie_chart = pygal.Pie(inner_radius=0.5)
    pie_chart.title = title
    # print(channel_score)
    total_score = channel_score["total_score"]
    for key, score in channel_score.items():
        if key in ["score_exp", "total_score"]:
            continue
        percent = float("{:.2f}".format(100 * score / total_score))
        pie_chart.add(legend_map[key], percent)
    pie_chart.render_to_file(f"pie.svg")


@app.route('/post_data', methods=['POST'])
def post():
    if request.method == 'POST':
        urllib3.disable_warnings()
        data = request.get_json()
        # print(data)
        openid = data.get("openid")
        search_key = data.get("search_key")
        query = [data.get("query")]
        end_ymd = datetime.datetime.now().strftime("%Y%m%d")
        start_ymd = (datetime.datetime.now() - datetime.timedelta(365)).strftime("%Y%m%d")
        forward_url = 'https://search.weixin.qq.com/cgi-bin/wxaweb/wxindex'
        # 指数趋势
        json_data = {'openid': openid, 'search_key': search_key, 'cgi_name': 'GetDefaultIndex',
                     'query': query, 'compound_word': [], 'start_ymd': start_ymd, 'end_ymd': end_ymd}
        response = requests.post(forward_url, json=json_data, headers=headers, verify=False)
        response_data = response.json()
        # json.dump(response_data, open("test1.json", "w"), indent=2)
        # print(response_data)
        # return
        title = response_data["content"]["resp_list"][0]["query"]
        time_indexes = response_data["content"]["resp_list"][0]["indexes"][0]["time_indexes"]
        # print(time_indexes)
        draw_line(title, time_indexes, 30)
        # # 数据来源
        json_data2 = {'openid': openid, 'search_key': search_key, 'cgi_name': 'GetMultiChannel',
                      'query': query, 'start_ymd': start_ymd, 'end_ymd': end_ymd}
        response = requests.post(forward_url, json=json_data2, headers=headers, verify=False)
        response_data = response.json()
        # json.dump(response_data, open("test2.json", "w"), indent=2)
        result_list = response_data["content"]["result_list"]
        draw_pie(title, result_list, 30)

    return {}


if __name__ == '__main__':
    app.run(host="127.0.0.1", debug=True)

小程序搜索关键字

  • 进入电脑端微信
  • 搜索 微信指数 小程序
  • 进入小程序,输入想要搜索的关键词(比如:和平精英)

数据图表展示

微信图表展示如下:

我们自己使用 pygal 画的图如下(svg 图用浏览器打开),对比发现,除了插值导致的光滑度不一样,图的整体走势是一致的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100道面试必会算法-26-删除排序链表中的重复元素

100道面试必会算法-26-删除排序链表中的重复元素|| 链表是一种常见的数据结构,它以节点的形式存储数据,每个节点包含数据以及指向下一个节点的引用。链表在插入和删除操作上有较高的效率,因此在许多应用中得到了广泛的使用。然而&#xff0c…

用香橙派AIpro部署大模型、安装宝塔搭建私有随身WEB开发环境

什么是香橙派 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛…

IPFoxy Tips:海外代理IP适用的8个跨境出海业务

在当今数字化时代,互联网已经成为商业和个人生活不可或缺的一部分。IP代理作为出海业务的神器之一,备受跨境出海业务人员关注。IPFoxy动态、静态纯净代理IP也根据业务需求的不同,分为静态住宅、动态住宅、静态IPv4、静态IPv6四种类型代理。那…

电脑msvcp140_atomic_wait.dll丢失的高效率解决方法,快速的一键修复

我们常常遇到各种不可预见的电脑故障问题,msvcp140_atomic_wait.dll丢失是一个常见的系统错误,它通常发生在Windows操作系统中,特别是当用户尝试运行依赖于Microsoft Visual C Redistributable的应用程序时。该问题可能导致程序崩溃或无法启动…

App Inventor 2 低功耗蓝牙BLE 两种通信方式:扫描和广播

低功耗蓝牙,也称为蓝牙 LE 或简称 BLE,是一种类似于经典蓝牙的新通信协议,不同之处在于它旨在消耗更少的功耗,同时保持可比的功能。 因此,低功耗蓝牙是与耗电资源有限的物联网设备进行通信的首选。BluetoothLE 扩展需…

神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks

相关链接: 神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神经网络不确定性综述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神经网络不确定性综述(Part III)——Uncertainty est…

这个橙子真的香!老司机徒手把玩香橙派Kunpeng Pro事后回忆录

说!你是哪个门派? 香橙,芸香科柑橘属小乔木。枝通常有粗长刺,新梢及嫩叶柄常被疏短毛。叶厚纸质,翼叶倒卵状椭圆形,顶部圆或钝。。。 咦?小李?我们不是搞IT的嘛,怎么会有…

Spring OAuth2:开发者的安全盾牌!(上)

何利用Spring OAuth2构建坚不可摧的安全体系?如何使用 OAuth2 从跨域挑战到性能优化,每一个环节都为你的应用保驾护航? 文章目录 Spring OAuth2 详解1. 引言简述OAuth2协议的重要性Spring Framework对OAuth2的支持概述 2. 背景介绍2.1 OAuth2…

2023年西安交通大学校赛(E-雪中楼)

E.雪中楼 如果算出按南北的序列,再转成从低到高的编号序列,岂不是太麻烦了,幸好,没有在这方面费长时间,而是意识到,本质就是要从低到高的编号序列,所以我就按样例模拟了一下,当a[i]0…

为什么AI企业需要联盟营销?

AI工具市场正在迅速发展,现仍有不少企业陆续涌出,那么如何让你的工具受到目标群体的关注呢?这相比是AI工具营销人员一直在思考的问题。 即使这个市场正蓬勃发展,也无法保证营销就能轻易成功。AI工具虽然被越来越多人认可和接受&a…

DETR整体模型结构解析

DETR流程 Backbone用卷积神经网络抽特征。最后通过一层1*1卷积转化到d_model维度fm(B,d_model,HW)。 position embedding建立跟fm维度相同的位置编码(B,d_model,HW)。 Transformer Encoder,V为fm,K,Q为fm…

QT基础初学

目录 1.什么是QT 2.环境搭建 QT SDK的下载 QT的使用 QT构建项目 快捷指令 QT的简单编写 对象树 编码问题 组件 初识信号槽 窗口的释放 窗口坐标体系 1.什么是QT QT 是一个跨平台的 C 图形用户界面库,支持多个系统,用于开发具有图形界面的应…

File name ‘xxxx‘ differs from already included file name ‘xxxx‘ only in casing.

一、报错信息 VSCode报错如下: File name ‘d:/object/oral-data-management/src/components/VisitLogPopup/Info.vue’ differs from already included file name ‘d:/object/oral-data-management/src/components/VisitLogPopup/INfo.vue’ only in casing. The…

AI企业需要“联盟营销”?一文带你探索AI企业营销新玩法!

为什么联盟营销对AI业务有较大优势 联盟营销在电商领域、saas领域与其他产品领域同样有效。在AI业务中,它有效的原因与其他领域大不相同。 高好奇心和试用率 AI领域是创新的热点。它吸引了一群渴望探索和尝试每一项新技术的人群。这种蓬勃的好奇心为聪明的AI企业提…

大模型助力企业提效,九章云极DataCanvas公司联合腾讯搜狗输入法发布私有化解决方案

近日,九章云极DataCanvas公司与腾讯搜狗输入法的合作再次升级。在搜狗输入法开发者中心正式推出之际,九章云极DataCanvas公司作为搜狗输入法的首批开发合作伙伴,双方联合发布“企业知识管理助手”私有化解决方案。 “企业知识管理助手”整体私…

AI虚拟试穿革命:I2VEdit技术引领电商视频内容创新

在当今快速迭代的电子商务领域,用户体验与内容创新是企业竞争力的核心要素。随着AI技术的飞速进步,AI虚拟试穿已不再局限于静态图像,而是迈向了动态视频的新纪元。本文将深入解析一项革新性技术——I2VEdit,如何以其独到之处,为电商尤其是服装零售行业带来一场内容创作与产…

Opencv图像处理技术(图像轮廓)

1图像轮廓概念: 图像轮廓是指图像中连续的像素边界,这些边界通常代表了图像中的物体或者物体的边缘。在数字图像处理中,轮廓是由相同像素值组成的曲线,它们连接相同的颜色或灰度值,并且具有连续性。轮廓可以用来描述和…

【几何】输入0-360度任意的角度,求上面直线与椭圆相切点的坐标计算公式

输入0-360度任意的角度,求上面直线与椭圆相切点的坐标计算公式 使用积分计算 使用到的公式有椭圆公式: x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2} = 1 a2x2​+b2y2​=1 平面旋转公式 X r = cos ⁡ θ ∗ ( X s − X O ) − sin ⁡ θ ∗ ( Y s − Y O ) + X …

文心智能体平台:快来创建你的Java学习小助理,全方位辅助学习

文章目录 一、文心智能体平台1.1平台介绍1.2智能体介绍 二、智能体创建三、体验与总结 一、文心智能体平台 文心智能体平台是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类…

Three.js 中的场景与相机基础

Three.js 中的场景与相机基础 一、场景(Scene) 在 Three.js 中,场景是所有 3D 对象存在和交互的容器。艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨:它就像是一个虚拟的 3D 空间,我们可以在其中…