python 微信公众号发文章_如何使用 Python 爬取微信公众号文章
我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章。但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦。
于是便想着能不能把某个公众号所有的文章都保存下来,这样就很方便自己阅读历史文章了。
话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。
主要有以下步骤:
1 使用 Fiddler 抓取公众号接口数据
2 使用 Python 脚本获取公众号所有历史文章数据
3 保存历史文章
Fiddler 抓包
Fiddler 是一款抓包工具,可以监听网络通讯数据,开发测试过程中非常有用,这里不多做介绍。没有使用过的可以查看这篇文章,很容易上手。
接下来,使用微信桌面客户端,打开某个公众号的历史文章,这里以我的公众号举例,如下图。
如果你的 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://mp.weixin.qq.com/mp/profile_ext"
# 请求头
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://mp.weixin.qq.com/mp/profile_ext"
# 请求头
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:
下载地址:
安装后将 wkhtmltopdf 目录下的 bin 添加到环境变量中。
保存为 chm 文件,可以下载 Easy CHM ,使用这个软件可以将 html 制作成 chm,使用教程网上比较多。
下载地址:
效果图:
pdf 和 chm 对比:
pdf 支持多终端,阅读体验好,但是有个大坑,就是微信文章保存的 pdf 没有图片,很影响阅读体验,暂未找到解决办法。
chm 的好处是可以建立索引,查看文章方便。一个公众号制作成一个 chm 文件,管理方便。不会出现图片不显示问题。
所以推荐将爬取到的公众号文章保存为 chm 文件,方便阅读。
python 微信公众号发文章_如何使用 Python 爬取微信公众号文章相关推荐
- python爬虫和数据分析的书籍_豆瓣书籍数据爬取与分析
前言 17年底,买了清华大学出版社出版的<Hadoop权威指南>(第四版)学习,没想到这本书质量之差,超越我的想象,然后上网一看,也是骂声一片.从那个时候其就对出版社综合实力很感兴趣,想通 ...
- 用python写用手机发邮件_如何用python写发邮件?
原标题:如何用python写发邮件? 1. 163邮箱 163邮箱需要设置客户端授权密码 请输入图片描述 # coding:utf-8 from email.header import Header ...
- python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...
- Python爬取微信公众号文章、点赞数
代码还是热乎的,只要你细心一步步的慢慢调试,绝壁没问题 前期准备 订阅号: Python: Fiddler: 微信账号: 流程 使用用微信公众号生成cookie 使用Fiddler抓取微信公众号数据, ...
- python 爬取微信公众号文章(selenium+webdriver)
"""通过搜狗搜索中的微信搜索入口爬取微信公众号文章(selenium) """ import re import os import js ...
- python爬取微信公众号_python使用webdriver爬取微信公众号
本文实例为大家分享了python使用webdriver爬取微信公众号的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- from selenium import we ...
- 使用Python爬取微信群里的百度云资源
需求背景: 最近误入一个免费(daoban)资源的分享群(正经脸),群里每天都在刷资源链接.但是大家都知道,百度云的分享链接是很容易被河蟹的,群里除了分享链接外,就是各种抱怨 "怎么又失效了 ...
- python爬取微信好友信息_python itchat 爬取微信好友信息
「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空 三张图分别是「微信好友头像拼接图」.「性别统计图」.「个性签名统计图」 「微信好友头像拼接图」 「性别统计 ...
- python itchat 爬取微信好友信息
原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚 ...
最新文章
- Angular指令 - 何时以及如何使用编译,控制器,预链接和后链接[关闭]
- 研究人员开发出最节能的 Wi-Fi 技术
- 面试题 flex(二)
- linux abs 和 屏幕 大小关系,观点|一个 Linux 菜鸟的回忆录
- OpenCV-Python图像拼接方法
- (转)TDI FILTER 网络过滤驱动完全解析
- C/C++ OpenCV之Sobel边缘检测
- Python调试方法
- java 字符串每隔两位插入一个字符
- android学习笔记_Intent
- 刷题记录 CF每日一题打卡 2020.5月?-六月16
- DISCUZ!论坛管理员无法登录后台的各种解决方法总结
- 软件开发项目中如何进行风险管理
- 如何卸载office201032位_office2010卸载不了应该如何通过清理注册表解决方法?
- 微信小程序实现收藏功能
- 鹏业软件CAD云服务转图纸没反应的说明
- 【Java Map数据】中国各省份省会城市经纬度
- 自由浮动时间与总浮动时间
- 文件上传 webshell 各类型 一句话木马 图片马 制作 教程
- 怎么看电脑的hdmi是输出还是输入_怎么看电脑显示器有没有hdmi接口
热门文章
- 一级计算机windows考试试题,2001年4月全国计算机等级考试一级笔试试题Windows
- android主线程和子线程的区别
- 磨金石教育摄影技能干货分享|优秀艺术类摄影作品欣赏
- 如何用计算机求极限,计算器的极限_500字
- Android创建子线程和回调主线程的几种方式
- c语言程序设计上海理工,2017年上海理工大学医疗器械与食品学院854C程序设计考研题库...
- 2022-2028年全球与中国汽车超声波传感器行业深度分析
- 在ubuntu下安装炉石传说
- 59. 建立正序链表
- 找出大文档中的所有手机号