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

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

话不多说,下面我就介绍如何使用 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://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:

下载地址:

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. 微信公众号推荐(自己关注的微信公众平台导航)

    平时大家都会关注一些公众号,每个人的兴趣不同,这里就列举了一些自己关注的微信公众号推荐信息,主要是一些微信相关的,还有科技类.创新类等,如果有你喜欢的就看看呗,点击链接就能查看这些公众号最新发布的微信 ...

  2. 公众号推荐:Python入门、统计学、推荐系统、机器学习、深度学习、数据分析...

    "三人行,必有我师焉",学习就是要从别人身上学到好的.今天特意给大家推荐10个优质公众号,目前属于活跃度非常高的几个原创公众号,涵盖了python和AI,重点是他们还坚持在原创技术 ...

  3. 资源| 深度学习公众号推荐(值得关注的公众号)

    向大家推荐几个值得关注的深度学习公众号 [计算机视觉联盟] 博士团队打造的微信公众号[计算机视觉联盟],主要分享深度学习.机器学习.图像解译.人工智能.无人驾驶等热门领域,开源框架学习(如Tensor ...

  4. 关于Python的书籍的阅读心得,推荐一本python的书籍

    python的推荐书籍有哪些 推荐的几本Python入门自学到精通必看的书籍吧~1.<"笨办法"学Python>为什么把它作为推荐给Python入门自学者的第一本书?因 ...

  5. python教学视频谁讲得好,python讲的比较好的视频

    学习python有什么好的视频教程 <上课视频资料>百度网盘资源免费下载链接提取码:5u85上课视频资料|最全Python学习资料|大数据文档|朱志杰  腾讯计费高一致性测试能力的构建实践 ...

  6. 5G消息应用号推荐 | 福建旅游3款应用号「数字鼓浪屿」「永定客家土楼」「海丝泉州」用起来!

    中秋.国庆将近 大家有出游计划吗? 如果你和小5一样,正计划到福建旅行 那你千万不要错过本期宝藏应用号推荐啦! 5G消息应用号推荐系列 第二期上新「福建特色景点」应用号 查景点.定制路线.订门票.查攻 ...

  7. python公众号推荐 知乎_爬取公众号及知乎专栏文章的标题链接的方法汇总

    记一次最近的工作内容(奇怪的任务增加了)因为Python是去年接触并且没有过爬虫的实际学习操作,所以在出现"要收集文章标题链接"的任务是还是有点难以下手的.虽然有了解过爬虫可以方便 ...

  8. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  9. python爬取微信公众号_python使用webdriver爬取微信公众号

    本文实例为大家分享了python使用webdriver爬取微信公众号的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- from selenium import we ...

  10. python公众号留言功能_Python 爬取公众号文章、评论

    前段时间有个爬取公众号评论小需求,花了几天查了不少资料,实现方案有好几种,最后其中一种得以实现.参考 [Python爬虫]微信公众号历史文章和文章评论API分析 . 本人是 Python 小白,会忽略 ...

最新文章

  1. “我,懂数据,不怕被裁”:这项核心能力到底有多香?
  2. Centos配置终端的快捷键
  3. 【转载】cookie
  4. 《柳叶刀》:群体免疫不靠谱!欧洲迄今最大新冠血清学调查显示,西班牙抗体阳性率仅5%...
  5. 刷题笔记-2019年6月26日
  6. HEVC/H265 性能分析
  7. tensorflow tfrecoder read write
  8. 结构设计模式 - 适配器设计模式
  9. clion上添加程序的预定添加程序的命令行
  10. PHP防注入安全代码
  11. spark 运行自带python示例的方式
  12. python——周边
  13. python接口自动化登录后保存个人简介_python接口自动化三(登录及发帖)
  14. 解析二进制文件的工具方法
  15. 计算机系统结构 网易云课堂,网易大布局教育事业:网易公开课、网易云课堂和MOOC分析...
  16. Access数据库修复 压缩
  17. yagni原则_YAGNI喜欢干吻
  18. turnserver 搭建
  19. 手把手教学MFC吃豆子教程
  20. windows获取文件列表及文件夹结构

热门文章

  1. 海尔简爱S11笔记本BIOS设置U盘启动教程
  2. stc15单片机c语言 pdf,stc15单片机编程指南.pdf
  3. ppt文件太大怎么压缩
  4. 2017年我国大数据趋势分析
  5. 路由器450m和1200m有什么区别
  6. 新手 RISC-V 编程的几点内容
  7. 浅谈Hibernate的flush机制
  8. 单片机(ISIS 7 Professional):简易0~7数字键盘代码项目
  9. 微信小程序云数据库增删改查
  10. 60906磁悬浮动力系统应用研究与模型搭建