上节讲解了如何抓取微信公众号文章,这节就来搞搞怎样保存,方便自己以后查阅。 这里我选择了chm。
有三个原因:
1.chm可以建立索引,查阅文章比较方便
2. chm暂时没发现有啥存储问题,例如图片不显示
3. 管理方便,一个公众号一个chm
那么接着上回的直接讲保存。
步骤很简单,分两步:
1.下载网页
2. 用Easy CHM选择下载的网页直接转换即可
首先Easy CHM的安装,下载网址: http://www.etextwizard.com/cn/easychm.html
下载完毕一路next即可。到这里,准备工作已经ok。
下面贴公众号的下载代码:
相比上次仅添加了这些用红色线条框住的代码。
网页下载完毕,把这些网页单独拖到一个文件夹当中,任意命名。
然后打开easychm
点击浏览选择你刚才保存网页的文件夹
然后点击 搜索选项
请选择这三个选项与这里保持相同。点击确定
然后点击编译。
方框1的位置是chm生成的标题,可以自己设置。然后点击方框二,CHM设置
请勾选这一选项,建立索引。
最后点击确定,然后生成chm文档即可。
最后效果图:
下面贴完整的mitmdump的抓包脚本
# -*- encoding:utf-8 -*-
import requests
import json
import time
import html
def parse(__biz, uin, key, pass_ticket, appmsg_token="", offset="0", **kwargs):
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",
}
params = {
"action": "getmsg",
"__biz": __biz,
"f": "json",
"offset": str(offset),
"count": "10",
"is_ok": "1",
"scene": "124",
"uin": uin,
"key": key,
"pass_ticket": pass_ticket,
"wxtoken": "",
"appmsg_token": appmsg_token,
"x5": "0",
}
proxies = {
"https": None,
"http": None,
}
res = requests.get(url, headers=headers, params=params, proxies=proxies, timeout=3)
data = json.loads(res.text)
msg_list = eval(data.get("general_msg_list")).get("list", [])
for i in msg_list:
url = i["app_msg_ext_info"]["content_url"].replace("\\", "").replace("http", "https")
url = html.unescape(url)
title = i["app_msg_ext_info"]["title"]
print(title, url)
res = requests.get(url, headers=headers, proxies=proxies, timeout=3)
with open(title+".html", "wb+") as f:
f.write(res.content)
# 判断是否可继续翻页 1-可以翻页 0-到底了
if 1 == data.get("can_msg_continue", 0):
time.sleep(3)
parse(__biz, uin, key, pass_ticket, appmsg_token, data["next_offset"])
else:
print("爬取完毕")
def response(flow):
if "profile_ext?action=home" in flow.request.url:
params = flow.request.url.split("?")[1]
params = {i.split("=")[0]: i.split("=")[1] for i in params.split("&")}
params["__biz"] = params["__biz"]+"=="
params["uin"] = requests.utils.unquote(params["uin"])
parse(**params)
到这里结束,over!!!