python爬取微信公众号怎么申请_如何使用 Python 爬取微信公众号文章

我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感受相逢恨晚,想一口气看完全部历史文章。可是微信的阅读体验挺很差的,看历史文章得一页页的日后翻,下一次再看时还得重复操做,非常麻烦。html

因而便想着能不能把某个公众号全部的文章都保存下来,这样就很方便本身阅读历史文章了。python

话很少说,下面我就介绍如何使用 Python 爬取微信公众号全部文章的。web

主要有如下步骤:json

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

2 使用 Python 脚本获取公众号全部历史文章数据网络

3 保存历史文章数据结构

Fiddler 抓包

Fiddler 是一款抓包工具,能够监听网络通信数据,开发测试过程当中很是有用,这里很少作介绍。没有使用过的能够查看这篇文章,很容易上手。app

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

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

6e922b71858782af5a71958885a5ee11.png

若是你的 fiddler 配置好了的话,可以看到以下图的数据。

d9f782558d3c9cdfcc9a982fee500494.png

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

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

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

4d40330791993380215c9cd6838672c7.png

构造请求,获取数据

接下来咱们的目标就是根据 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

效果图:

77c88e6b5e027f71898108ea7126aefb.png

pdf 和 chm 对比:

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

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

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

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值