我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章。但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦。

于是便想着能不能把某个公众号所有的文章都保存下来,这样就很方便自己阅读历史文章了。

话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。

主要有以下步骤:

1 使用 Fiddler 抓取公众号接口数据

2 使用 Python 脚本获取公众号所有历史文章数据

3 保存历史文章

Fiddler 抓包

Fiddler 是一款抓包工具,可以监听网络通讯数据,开发测试过程中非常有用,这里不多做介绍。没有使用过的可以查看这篇文章,很容易上手。

https://blog.csdn.net/jingjingshizhu/article/details/80566191

接下来,使用微信桌面客户端,打开某个公众号的历史文章,这里以我的公众号举例,如下图。

如果你的 fiddler 配置好了的话,能够看到如下图的数据。

图中包含抓取的 url、一些重要的参数和我们想要的数据。

这些参数中,offset 控制着翻页,其他参数在每一页中都是固定不变的。

接口返回的数据结构如下图,其中 can_msg_continue 字段控制着能否翻页,1 表示还有下一页,0 表示没有已经是最后一页了。next_offset 字段就是下一次请求的 offset 参数。

构造请求,获取数据

接下来我们的目标就是根据 url 和一些参数,构建请求,获取标题、文章 url 和日期等数据,保存数据。

保存数据一种是使用 pdfkit 将 文章 url 保存为 pdf 文件;另一种是先保存 html 文件,然后将 html 制作成 chm 文件。

1 将 文章 url 保存为 pdf 文件,关键代码如下:

def parse(index, biz, uin, key):

# url前缀

url = "https://..."

# 请求头

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",

}

proxies = {

'https': None,

'http': None,

}

# 重要参数

param = {

'action': 'getmsg',

'__biz': biz,

'f': 'json',

'offset': index * 10,

'count': '10',

'is_ok': '1',

'scene': '124',

'uin': uin,

'key': key,

'wxtoken': '',

'x5': '0',

}

# 发送请求,获取响应

response = requests.get(url, headers=headers, params=param, proxies=proxies)

response_dict = response.json()

print(response_dict)

next_offset = response_dict['next_offset']

can_msg_continue = response_dict['can_msg_continue']

general_msg_list = response_dict['general_msg_list']

data_list = json.loads(general_msg_list)['list']

# print(data_list)

for data in data_list:

try:

# 文章发布时间

datetime = data['comm_msg_info']['datetime']

date = time.strftime('%Y-%m-%d', time.localtime(datetime))

msg_info = data['app_msg_ext_info']

# 文章标题

title = msg_info['title']

# 文章链接

url = msg_info['content_url']

# 自己定义存储路径(绝对路径)

pdfkit.from_url(url, 'C:/Users/admin/Desktop/wechat_to_pdf/' + date + title + '.pdf')

print(title + date + '成功')

except:

print("不是图文消息")

if can_msg_continue == 1:

return True

else:

print('爬取完毕')

return False

2 保存 html 文件,关键代码如下

def parse(index, biz, uin, key):

# url前缀

url = "https://..."

# 请求头

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",

}

proxies = {

'https': None,

'http': None,

}

# 重要参数

param = {

'action': 'getmsg',

'__biz': biz,

'f': 'json',

'offset': index * 10,

'count': '10',

'is_ok': '1',

'scene': '124',

'uin': uin,

'key': key,

'wxtoken': '',

'x5': '0',

}

# 发送请求,获取响应

reponse = requests.get(url, headers=headers, params=param, proxies=proxies)

reponse_dict = reponse.json()

# print(reponse_dict)

next_offset = reponse_dict['next_offset']

can_msg_continue = reponse_dict['can_msg_continue']

general_msg_list = reponse_dict['general_msg_list']

data_list = json.loads(general_msg_list)['list']

print(data_list)

for data in data_list:

try:

datetime = data['comm_msg_info']['datetime']

date = time.strftime('%Y-%m-%d', time.localtime(datetime))

msg_info = data['app_msg_ext_info']

# 标题

title = msg_info['title']

# 内容的url

url = msg_info['content_url'].replace("\\", "").replace("http", "https")

url = html.unescape(url)

print(url)

res = requests.get(url, headers=headers, proxies=proxies)

with open('C:/Users/admin/Desktop/test/' + title + '.html', 'wb+') as f:

f.write(res.content)

print(title + date + '成功')

except:

print("不是图文消息")

if can_msg_continue == 1:

return True

else:

print('全部获取完毕')

return False

保存文章

保存为 pdf 文件,用到了 python 的第三方库 pdfkit 和 wkhtmltopdf。

安装 pdfkit:

pip install pdfkit

安装 wkhtmltopdf:

下载地址:

https://wkhtmltopdf.org/downloads.html

安装后将 wkhtmltopdf 目录下的 bin 添加到环境变量中。

保存为 chm 文件,可以下载 Easy CHM ,使用这个软件可以将 html 制作成 chm,使用教程网上比较多。

下载地址:

http://www.etextwizard.com/cn/easychm.html

效果图:

pdf 和 chm 对比:

pdf 支持多终端,阅读体验好,但是有个大坑,就是微信文章保存的 pdf 没有图片,很影响阅读体验,暂未找到解决办法。

chm 的好处是可以建立索引,查看文章方便。一个公众号制作成一个 chm 文件,管理方便。不会出现图片不显示问题。

所以推荐将爬取到的公众号文章保存为 chm 文件,方便阅读。

需要完整代码和文中相关软件的朋友,后台回复关键词 ”公众号文章“ 获取。

如何用python爬取公众号文章_如何使用 Python 爬取微信公众号文章相关推荐

  1. python下载微信公众号文章_一步步教你打造微信公众号文章爬虫(3)-批量下载

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  2. 微小宝公众号排行榜_榜单 广东省技工院校微信公众号排行榜(第51期)

    ▼ 2020年10月榜单出炉!本期榜单最大看点,莫过于发文33篇的劳模代表--"广东高新技术高级技校"以高达830.49的微信传播指数WCI,荣登第51期广东省技工院校微信公众号排 ...

  3. 微小宝公众号排行榜_榜单 广东省技工院校微信公众号排行榜(50期)

    ▼ 2020年9月榜单出炉!首先是热腾腾的广告时间:今年的广东省技工院校官方微信公众号推优展示活动已于6月份正式启动,详情请戳 活动 | 2020年第四届广东省技工院校官方微信公众号推优展示活动正式启 ...

  4. python 数据拟合 预测_GitHub - wanng-ide/Python-WeChat-Predict: 用现有的数据对微信公众号的一些数据做一个预测,主要采用多项式拟合来构建模型。...

    Python-WeChat-Predict 用现有的数据对微信公众号的一些数据做一个预测,主要采用多项式拟合来构建模型. 概述 项目主要内容是对32个微信公众号在30天的数据进行处理,初始数据全部保存 ...

  5. 一百多篇热门经典计算文章 来自 11 个热门的技术类微信公众

    为了扩散本文收录的一百多篇热门经典计算文章,主页君也做回标题党.拿了板砖的童鞋,请往下看了再拍不迟 :) 本文收录的文章来自 11 个热门的技术类微信公众号.我们从每个公号中选出了 2015 年最热门 ...

  6. ➢ 微信公众号运营教程(一)申请一个微信公众号

    ➢ 微信公众号运营教程(一)申请一个微信公众号 我们要创建一个个人公众号,首先需要申请一个公众号. 下面详细说说申请过程. 注册地址:https://mp.weixin.qq.com/ 或者直接搜索: ...

  7. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  8. 订阅号服务器消息推送数量,如何解决微信公众号一个月只能发4次消息的问题...

    如何解决微信公众号一个月只能发4次消息的问题 发布时间:2021-01-19 09:49:16 来源:亿速云 阅读:120 作者:小新 这篇文章将为大家详细讲解有关如何解决微信公众号一个月只能发4次消 ...

  9. 微信公众号中,怎么插入代码块?(微信公众号中,代码块怎么排版?)

    微信公众号代码编辑工具 步骤1.如上图所示,我们要点击复制; 步骤2.直接ctrl+v粘贴到微信公众号的编辑框中,如下图所示: 微信公众号排版工具(135编辑器) 135编辑器是一款很好的微信公众号编 ...

  10. 小程序公众号平台添加服务器,微擎绑定对接微信公众号小程序图文教程

    服务器文档网,在为客户服务的过程中,发现新入行的童鞋不会对接绑定公众号,今天有点闲暇,做了一份教程,供童靴们参考. 第一步:登录 第二步:点击[新建公众号]. 第三步:点击[手动添加公众号] 第四步: ...

最新文章

  1. 算法工程师面试必考项:二叉树
  2. C语言assert的用法
  3. MyEclipes 设置代码自动提示
  4. Debian的软件包管理工具命令不完全列表
  5. Android代码实现控件闪烁效果
  6. 【IDEA】IDEA 下 如何 jstack 线程状态
  7. 蓝桥杯 波动数列 01背包
  8. Illustrator 教程,如何在 Illustrator 中锁定、分组和隐藏内容?
  9. 4月18日会议总结(整理—祁子梁)
  10. JavaScript高级程序设计4.pdf
  11. 网络舆情监测在教育行业的必要性
  12. 聚类算法--K-Medoids(基于R的应用示例)
  13. 【win 10】win 10:远程连接 Windows 服务器工具下载、安装和使用:PowerShell server Putty —— win 10 之间通过 ssh 登录
  14. summer框架API--summer.download
  15. Hello Goodbye
  16. 农夫过河问题的c语言实现
  17. 我不知道 我知道你不知道 现在我知道了 我也知道了
  18. c语言case套case,switch…case
  19. 常用数据结构之二叉树及树的四种遍历方式
  20. 高品质混响延迟插件7个合集 – ValhallaDSP Plugins Bundle macOS

热门文章

  1. “让代码能工作”才是专业开发者的头等大事?看看Bob大叔怎么说
  2. 马上毕业了,拼多多和国家电网,选哪个?
  3. js中创建对象的5种方法
  4. python如何计算环比增长率
  5. 华为p30自带浏览器 样式表命名为skin.css 里面的color样式不起作用
  6. php oci8 12c.so,编译安装PDO_OCI支持ORACLE 12c
  7. 01-初识 pygame 游戏开发
  8. 关于错误Failure [INSTALL_FAILED_ALREADY_EXISTS]的解决办法
  9. 好酒和那些廉价酒比贵在哪里
  10. 已知一点的经纬度和该点到另一点的距离,求另一点的经纬度