使用Python获取公众号下所有的文章

news2024/11/19 0:41:02

我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章。本文主要介绍了使用Python获取公众号下所有的文章,感兴趣的可以了解一下

导出公众号所有文章

随着互联网的不断发展,网络上兴起了很多的自媒体平台。不用我说,相信大家也能知道当下非常流行的平台都有哪些。

可以说凡是比较知名的自媒体,都有自己的公众号。但是平台的创新与出现可谓层出不穷,如果需要入住平台,肯定需要获取原平台的历史资源。

比如说微信公众号,我们就需要获取微信公众号的文章,将其导出后,入住其他的平台,那么如何获取自己公众号下的所有文章呢?

开发者ID与开发者密码

其实,公众号给我们开发中提供了非常友好的接口,并不需要我们一个一个去爬,就可以获取文章的所有链接。

 

如上图所示,我们需要进入公众号主页,然后通过设置与开发-基本配置,找到开发者ID与开发者密码。

因为微信给我们提供了接口专门用于我们获取公众号的文章,具体的接口网址,如下面代码所示:

1

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

这里的APPID就是开发中ID,APPSECRET就是开发者密码,如下图所示进行获取。

 

不过,这里有一个IP白名需要注意,为了公众号文章的安全,必须设置IP地址才能获取。如果后面的代码并没有在IP下运行,那么肯定会报错。


如上图所示,IP白名单是直接设置你的IP地址,设置完成之后点击修改,弹出二维码后用微信扫描即可。

 

1

https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=

这样还不行,因为该网址接口只是获取access_token,也就是访问公众号的令牌,而获取公众号文章的链接是上面这个。

获取Json格式的公众号文章信息

既然已经基本了解了原理,下面我们来通过实战获取所有的公众号标题,链接,描述以及文章的展示图。示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import requests

import json

import csv

def getGZHJson(appid, secret):

    path = " https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"

    url = path + "&appid=" + appid + "&secret=" + secret

    result = requests.get(url)

    token = json.loads(result.text)

    access_token = token['access_token']

    data = {

        "type": "news",

        "offset": 0,

        "count": 1,

    }

    headers = {

        'content-type': "application/json",

        'Accept-Language': 'zh-CN,zh;q=0.9'

    }

    url = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=' + access_token

    result = requests.post(url=url, data=json.dumps(data), headers=headers)

    result.encoding = result.apparent_encoding

    result = json.loads(result.text)

    count = int(result['total_count'])

    gzh_dict = {"news_item": []}

    for i in range(0, count):

        data['offset'] = i

        result = requests.post(url=url, data=json.dumps(data), headers=headers)

        result.encoding = result.apparent_encoding

        result = json.loads(result.text)

        for item in result['item'][0]['content']['news_item']:

            temp_dict = {}

            temp_dict['title'] = item["title"]

            temp_dict['digest'] = item["digest"]

            temp_dict['url'] = item["url"]

            temp_dict['thumb_url'] = item["thumb_url"]

            print(temp_dict)

            gzh_dict['news_item'].append(temp_dict)

    return json.dumps(gzh_dict)

getGZHJson('开发者ID', '开发者密码')

这里,我们先来看一下result的原始文本数据,具体如下所示:

 

原始的JSON数据中,有一个非常重要的数据也就是total_count,也就是公众号成立以来,推送的次数。

但是需要注意,公众号可以单次推送一篇,或者单次推送2,3,4篇,并不一直都是一模一样。

而获取哪次推送的数据,你可以通过offset逆向溯源,至于每次是多少篇,则需要通过返回的Json数据news_item有多少个决定。如下图所示:

 

所以,我们还有在里面加上一次遍历,第1层遍历的是微信公众号推送的哪天数据,第2层遍历,遍历的是当天发送的篇数。运行之后,效果如下:

 

参数含义
title文章标题
digest文章描述
url文章链接
thumb_url文章展示图

保存数据到CSV文件

当然,我们获取数据并不是为了在控制台去打印,而是为了导出数据。所以,我们将上面的数据打包到CSV文件中保存起来。

示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

result = requests.post(url=url, data=json.dumps(data), headers=headers)

result.encoding = result.apparent_encoding

print(result.encoding)

result = json.loads(result.text)

count = int(result['total_count'])

#替换下面的代码

ulist = ["_id", "title", 'digest', 'url', 'thumb_url']

# 保存数据到csv文件

new_item_csv = 'week'

with open('{}.csv'.format(new_item_csv), 'w', encoding='utf-8-sig', newline='') as f:

    writer = csv.writer(f, dialect='excel')

    writer.writerow(ulist)

    for i in range(0, count):

        data['offset'] = i

        result = requests.post(url=url, data=json.dumps(data), headers=headers)

        result.encoding = result.apparent_encoding

        result = json.loads(result.text)

        for item in result['item'][0]['content']['news_item']:

            writer.writerow([count_id, item["title"], item["digest"], item["url"], item["thumb_url"]])

            count_id += 1

这里,只需要改count = int(result[‘total_count'])代码下面的所有数据即可。上面的代码保持不变。

需要额外注意的是,之所以设置result.encoding = result.apparent_encoding,是因为返回数据的编码事先我们并不知道,这样做能保证任何编码都能有效的解析。

运行之后,如下图所示,所有的公众号文章的基本详情就全部获取到了。

 

到此这篇关于使用Python获取公众号下所有的文章的文章就介绍到这了。

点击拿去
50G+学习视频教程
100+Python初阶、中阶、高阶电子书籍

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

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

相关文章

【源码篇】基于SpringBoot+Jsp的日记记录系统

1、项目介绍 基于SpringBootJsp的日记记录系统所有功能均对用户开放,只有用户角色。 是一款面向用户的系统,用户可以自己注册账号进行登录,管理自己的信息(个人中心)、自由添加日记分类、发布日记来记录自己所遇到有趣的人和事、也可以发表…

BiFormer 实验记录

代码来自文中地址 目录 一、前向传播过程 1、Path Embedding 2、BiFormer Block BRA模块 网络结构 一、前向传播过程 1、Path Embedding 见网络结构部分,4倍下采样 2、BiFormer Block 对应 x x self.pos_embed(x) 对应 x x self.drop_path(self.attn(…

【5.22】七、移动App测试

目录 7.1 移动App测试概述 1. 移动App特性 2. 移动App测试与传统软件测试的区别 7.2 移动App测试要点 7.2.1 UI测试 7.2.2 功能测试 7.2.3 专项测试 7.2.4 性能测试 7.3 移动App测试流程 第三方测试平台 7.4 移动App测试工具 7.1 移动App测试概述 移动App&#xff…

就业内推 | 应届生专场,有华为、思科认证优先,六险一金

01 金科 🔷招聘岗位:网络工程师 🔷职责描述: 1、为银行、企业客户提供技术服务(包括驻场支持和现场技术支持); 2、驻客户现场配合客户完成思科、华三、华为主流网络设备的配置、管理&#xff1…

基于C++的类UNIX文件系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 一、题目要求 使用一个普通的大文件(如 c:\myDisk.img ,称之为一级文件)模拟 UNIX V6的一个文件卷,一个文件卷实际上就是一张逻辑磁盘,磁盘中存储的信息以块为单位。…

小航助学2023年3月GESP_C++一级试卷(含题库答题软件账号)

GESP在线模拟训练系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 答案:B 第1题以下不属于计算机输入设备的有( )。 A、键盘B、音箱C、鼠标D、传感器 …

如何使用Python和wxPython构建一个HTML Title提取工具

以下代码可以用于以下场景: 在Web开发中,获取网页中的Title内容,以用于页面SEO。在数据挖掘和分析中,获取包含Title信息的HTML页面,以进行进一步的文本处理和分析。在一些需要从HTML源代码中获取元数据的应用中&#…

STM32单片机语音识别家庭灯光控制系统

实践制作DIY- GC0132-语音识别家庭灯光控制系统 一、功能说明: 基于STM32单片机设计-语音识别家庭灯光控制系统 二、功能介绍: STM32F103C系列最小系统板语音识别模块18650锂电池太阳能充电板LCD1602显示器4个LED灯板对应卧室、厨房、客厅、厕所…

Springboot +spring security,自定义认证器实现验证码功能

一.简介 SpringSecurity 默认是不支持验证码功能的,但是可以自己扩展,这也是使用SpringSecurity的好处之一,原生不支持,我们就自己扩展。 二.思路分析 因为系统默认的有一个DaoAuthenticationProvider 认证处理器,但…

springboot+java高校学生学分置换系统安全开发

本选题具有以下5个方面的意义: (1)减少人工的繁琐宣传组织统计时间,提高工作效率和工作精确度以扩大比赛的规模[4]。 (2)将人工阶段难以实现的公开、公正、公平,通过多方监督的方法进行解决。 &…

美陆军面向战场物联网的边缘智能发展综述

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

UVC调用过程部分细节分析

UVC调用过程部分细节分析 文章目录 UVC调用过程部分细节分析概括分析UVC驱动调用过程1.open:ioctl 2.VIDIOC_QUERYCAP3.VIDIOC_ENUM_FMT4.VIDIOC_G_FMT5.VIDIOC_TRY_FMT6.VIDIOC_S_FMT /7.VIDIOC_REQBUFS8.VIDIOC_QUERYBUF9.mmap10.VIDIOC_QBUF11.VIDIOC_STREAMON12.poll13.VID…

基于Java+SpringBoot+vue+element实现校园疫情防控系统详细设计和实现

基于JavaSpringBootvueelement实现校园疫情防控系统详细设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

好用又便宜的平替苹果笔有哪些?平价的平板触控笔推荐

苹果的Pencil在最近一直都受到市场的追捧,而苹果原装的那款电容笔,除了性能好,还有就是价格贵了点。当然,你也可以使用这款Apple Pencil,但是,如果你不愿意花费太多的钱,可以选择一个平替的电容…

低功耗红外测距感应模块 引领皂液机的革新应用方案WTU201F2 B004

作为现代社会卫生意识的提升,智能洗手设备在公共场所的普及变得越来越重要。为了满足市场需求,唯创知音推出了全新的WTU201F2 B004红外测距模块,作为皂液机红外感应模块,凭借其低功耗和小体积的特点,这款模组将成为开发…

本地电脑部署微力同步私人网盘,端口映射实现远程访问

✨个人主页:bit me👇 目 录 🐾1.前言💐2. 微力同步网站搭建🌸2.1 微力同步下载和安装🌷2.2 微力同步网页测试🍀2.3 cpolar的安装和注册 🌹3.本地网页发布🌻3.1 Cpolar云端…

新增Video-Worker组件,支持会话录像自动转MP4格式,JumpServer堡垒机v3.3.0发布

2023年5月22日,JumpServer开源堡垒机正式发布v3.3.0版本。在这一版本中,资产连接令牌支持在有效期内不限次数地复用;用户登录方式(包含钉钉、飞书、企业微信扫码登录)支持当不存在的用户扫码登录后,自动创建…

【C++】函数提高

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、函数默认参数 3、函数占位参数 4、总结 1、缘起 以前学习过了函数的基本用法和功能,现在是时候学习函数…

Android应用程序架构分析和基本语法

文章目录 一、控制层与表现层二、Android程序的组成结构三、Android语法基础数据类型与转换转义字符类与对象接口 一、控制层与表现层 在Android应用程序中,逻辑控制层与表现层是分开的设计的。逻辑控制层由Java应用程序实现,表现层由XML文档描述&#…

深入探索 Cilium 的工作机制

这篇之前写 Kubernetes 网络学习之 Cilium 与 eBPF 记录的内容,隔了几个月终于想起把笔记完成,作为探索 Cilium 工作原理的入门,也还是 Cilium 冰山一角,像是高级的网络策略、网络加密、BGP 网络、服务网格等方面并没有深入。如果…