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

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

话不多说,下面我就介绍如何使用 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 Trueelse: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']
​# 内容的urlurl = 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 Trueelse: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 文件,方便阅读。

html如何获取请求头变量的值。_如何使用 Python 爬取微信公众号文章相关推荐

  1. python获取藏头诗内容_Watson使用指南(六)在微信公众号中实现识图作诗功能

    本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流. 目录: 概述 环境准备及相关账号申请 部署Python Flask应用到Bluemi ...

  2. python获取币安k线数据_如何利用Python 爬取币乎的数据

    1LSGO软件技术团队 贡献人:李金原 如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, the gre ...

  3. html如何获取请求头变量的值。_手写一个静态资源中间件,加深了解服务器对文件请求的缓存策略...

    上一篇文章<详解页面静态资源的缓存策略,搞懂强缓存和协商缓存再做性能优化>我们从理论上介绍了浏览器和服务器是如何对静态资源做缓存的,这篇文章我们把它做成一个node服务器的静态资源中间件. ...

  4. 微信公众号文章信息(阅读量、在看、点赞数)获取

      实现这一个功能主要用到了selenium.mitmproxy和wechatarticles,利用selenium可以实现脚本模拟浏览器访问,mitmproxy配合wechatarticles获取文 ...

  5. 第九部分 代理的使用(代理设置,代理池的搭建,用代理获取微信公众号文章)...

    网站采取的反爬虫措施有:弹出验证码,需要登录.检测某个IP在单位时间内的请求次数,超过规定的某个值,服务器拒绝服务,返回一些错误信息,这是封IP. 既然服务器封IP,可采用某种方式伪装IP,让服务器不 ...

  6. 获取微信公众号文章内视频真实地址

    PHP获取微信公众号文章内视频与音频真实地址 微信公众号的文章的爬取可以看到这个项目:github 基于QueryList的微信公众号文章获取工具 有任何问题可以留言. 返回数据: 包含音频和视频 包 ...

  7. 获取微信公众号文章封面图的技巧/网站

    直接使用访问:http://weixin.shareperform.com 以下主要是立项和事项的过程. 作为一个从Code转为营销策划的营销人,这周实力修一波操作. 一.需求 一个好的微信公众号推文 ...

  8. 微信小程序获取微信公众号文章2

    微信小程序获取微信公众号文章2 前面介绍了一篇微信小程序打开微信公众号中的文章实战教程,主要介绍了实现的具体原理,但是实际去做的时候,发现了更多的坑,所以这里再补充一下. 原先的思路是不完整的 原先我 ...

  9. 快速获取微信公众号文章的技巧

    微信公众号是一个信息传播平台,许多人通过它获取信息.分享知识.但是,有时候我们会遇到需要保存公众号文章的情况.那么,如何获取微信公众号文章呢?本文将为您详细介绍. 一.使用搜狗微信搜索 搜狗微信搜索是 ...

最新文章

  1. ATL::CStringA和std::string之间转换的一些误区
  2. 十一.python面向对象(接口)abstractmethod,ABCMeta
  3. mysql四个对勾_Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\...
  4. python处理多个excel文件-Python将多个excel文件合并为一个文件
  5. javascript写dfs算法
  6. Pandas及简单学习
  7. ubuntu18.10 cosmic更换阿里云的源
  8. zigbee是什么,为什么说它最适合智能家居设备
  9. directx最终用户运行时_运维定位服务故障时,前5分钟都在忙啥?
  10. 计算机组成原理刘红玲,计算机组成原理/21世纪高等学校规划教材
  11. FineReport数据执行官知识点
  12. 资深架构师手把手教你性能优化
  13. 17.1 Replication Configuration 复制:
  14. JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚
  15. f1c100s uboot调试记录
  16. Android 新浪微博开放平台应用 android签名怎么获得
  17. 北航2019计算机学院就业报告,就业丨北航2019届就业质量报告,本科就业率95%
  18. Nginx的rewrite(地址重定向)剖析
  19. Ubuntu16.04LTS上安装QQ,QQ音乐
  20. windows 常用快捷键(常用)

热门文章

  1. 每日一皮:传说中的三次握手...
  2. 星巴克在GitHub中泄漏API密钥,发现者获4000美金奖励
  3. html5音轨字幕,(图解)如何修改mkv默认音轨和字幕
  4. C语言中定义加号的数据类型,C/C++知识点之c语言基础数据类型及命名规范
  5. mxnet:mx.sym.BlockGrad理解
  6. opencv投影变换
  7. python2 webserver class
  8. python os.chdir函数
  9. _ctypes.COMError: (-2147024809, '参数错误。', (None, None, None, 0, None))
  10. Github 项目推荐 | 用手势输入表情符号 —— Emojinator