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

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

话不多说,下面我就介绍如何使用 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 爬取微信公众号文章相关推荐

  1. 如何用来逗微信图文编辑器整理高质量的端午节公众号文章

    端午节是古已有之的民俗大节,起源于中国,比韩国的江陵端午祭早,最初是我国古代百越地区崇拜龙图腾的部族以龙舟竞渡形式祭龙祖的节日.微信公众号文章可以从不同地域的端午节习俗的差异入手,使用来逗微信图文编辑 ...

  2. python爬虫代理的使用_从零开始写Python爬虫 --- 2.4 爬虫实践:代理的爬取和验证...

    爬网站的时候,由于各种原因,ip被锁了,这个时候我们就需要通过代理来突破封锁.网上有很多代理网站,付费和免费的都有,这次我们就来写一个scrapy爬虫,爬一些免费的代理下来用. 目标分析: 本次爬取了 ...

  3. python爬虫携程酒店_携程酒店爬取分享

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import urllib.request from bs4 import BeautifulSoup import csv import re def ...

  4. python爬虫实例电商_如何用代码爬抓电商数据(附淘宝API调用实例)

    原标题:如何用代码爬抓电商数据(附淘宝API调用实例) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能B ...

  5. python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!

    世界上有三种宝贵的东西: 知识.粮食和友谊. 那么,1 块钱,你能买到什么呢? 骑一次共享单车 买 2 包辣条 1/190 件格子衬衫 1/299 支口红 1/10099 个 iPhone XS 但是 ...

  6. python爬虫在哪里学_学完了python基础想学习python爬虫从哪里学起呢?

    针对Python爬虫,我还是有一定的话语权的 我之前就是先学习Python基础,然后用Python做了几个网站,后面需要数据,所以开始学习Python的爬虫技术. 关于Python方面的爬虫, 最基础 ...

  7. 我用python爬虫挣钱的经历_我用Python爬虫挣钱的经历

    在下写了10年Python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫挣钱的方式. 1.最典型的就是找爬虫外包活儿. 这个真是体力活,最早是在国外各个freelancer网站上找适 ...

  8. 网易微专业python爬虫工程师一期多久_微专业-Python爬虫工程师 – 3个月成为网络爬虫工程师...

    [2020最新]Python爬虫工程师 – 3个月成为网络爬虫工程师 课程简介 1.平均薪资高 入行爬虫工程师薪资可达15w高级爬虫工程师薪资可达30w

  9. python爬虫搜狐新闻_应用案例2:爬取搜狐体育的新闻信息

    爬虫学习使用指南 Auth: 王海飞 Data:2018-06-25 Email:779598160@qq.com github:https://github.com/coco369/knowledg ...

  10. python爬虫抓收费图片_简单的Python抓taobao图片爬虫

    写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 代码如下: # -*- coding: cp936 -*- import urllib2 import ur ...

最新文章

  1. 有了AD,还需要WINS吗?
  2. ORACLE内存结构简介
  3. spring json
  4. Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
  5. oracle数据库延迟执行,如何诊断oracle数据库运行缓慢或hang住的问题
  6. 一个域名能申请多少个ssl_必须要有域名才能申请SSL证书吗?
  7. java mysql limit分页,MySQL limit使用方法以及超大分页问题解决
  8. 2022最新手机号码正则
  9. RAW到底比JPG强在哪里
  10. CCF CSP 20190301解答
  11. java强制删文件夹_Java 删除文件夹 和 文件 集合
  12. UEditor定制工具栏图标
  13. 微软梁念坚:六个新潮流推动IT行业发展
  14. mysql 危险字符_PHP过滤指定字符串,过滤危险字符
  15. 【学习笔记】CSW网络目录服务
  16. Python-Regression
  17. Spark Streaming + ES构建美团App异常监控平台
  18. 《白皮书》:身边的人脸安全事件及背后的三类攻击手段 -阿里云开发者社区
  19. magento Shopping Cart Price Rule 购物车促销规则
  20. Ackerman数学函数

热门文章

  1. python试题中连续质数计算,官方答案看不懂,就自己写了个,请大神过目!
  2. qq互联平台配置网站回调域避免出现“redirect uri is illegal(100010)”
  3. Win11家庭版U盘Pe安装
  4. 拥抱生产力变革!GPT4接入Office,动嘴就能Excel到PPT!
  5. viso转高精度矢量PDF
  6. cocos2dx-3.x物理引擎Box2D介绍
  7. 【秋招面经】超星集团前端题目总结
  8. C# 实现对PPT编辑
  9. VMware player16 虚拟机 Ubuntu20.04
  10. 英语发音之音标11---总结()