python response重头开始_用 Python 抓取公号文章保存成 PDF
今天为大家介绍如何将自己喜欢的公众号的历史文章转成 PDF 保存到本地。前几天还有朋友再问,能不能帮把某某公众号的文章下载下来,因为他很喜欢这个号的文章,但由于微信上查看历史文章不能排序,一些较早期的文章翻很长时间才能找到,而且往往没有一次看不了几篇,下次还得再重头翻,想想就很痛苦。
抓取的思路
目前我在网上找了找,看到实现的方式大概分为以下三种:
- 通过手机和电脑相连,利用 Fiddler 抓包获取请求和返回报文,然后通过报文模拟请求实现批量下载。
- 通过搜狗浏览器或者用
wechatsogou
这个 Python 模块,去搜索公号后,实现批量下载。 - 通过公众号平台,这个需要你能登陆到公众号平台即可,剩下就比较简单。
整体来看最后一种方式是最简单的,接下来将以第三种方式为例,为大家介绍如何达到批量下载的目的。
获取 Cookie
首先我们登陆到公众号平台,登陆成功后会跳转到公众号管理首页,如下图:
然后我们在当前页面打开浏览器开发者工具,刷新下页面,在网络里就能看到各种请求,在这里我们点开一个请求 url,然后就能看到下图网络请求信息,里面包含请求的 Cookie 信息。
接下来我们需要把 Cookie 信息复制下来转换成 Json 格式串保存到文本文件里,以供后面请求链接时使用。这里需要写一段 Python 代码进行处理,新建文件 gen_cookies.py
写入代码如下:
# gen_cookies.pyimport json# 从浏览器中复制出来的 Cookie 字符串cookie_str = "pgv_pvid=9551991123; pac_uid=89sdjfklas; XWINDEXGREY=0; pgv_pvi=89273492834; tvfe_boss_uuid=lkjslkdf090; RK=lksdf900; ptcz=kjalsjdflkjklsjfdkljslkfdjljsdfk; ua_id=ioje9899fsndfklsdf-DKiowiekfjhsd0Dw=; h_uid=lkdlsodifsdf; mm_lang=zh_CN; ts_uid=0938450938405; mobileUV=98394jsdfjsd8sdf; \……中间部分省略 \ EXIV96Zg=sNOaZlBxE37T1tqbsOL/qzHBtiHUNZSxr6TMqpb8Z9k="cookie = {}# 遍历 cookie 信息for cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 将cookies写入到本地文件with open('cookie.txt', "w") as file: # 写入文件 file.write(json.dumps(cookie))
好了,将 Cookie 写入文件后,接下来就来说下在哪里可以找到某公号的文章链接。
获取文章链接
在公号管理平台首页点击左侧素材管理菜单,进入素材管理页面,然后点击右侧的新建图文素材按钮,如下图:
进入新建图文素材页面,然后点击这里的超链接:
在编辑超链接的弹出框里,点击选择其他公众号的连接:
在这里我们就能通过搜索,输入关键字搜索我们想要找到公众号,比如在这里我们搜索 "Python 技术",就能看到如下搜索结果:
然后点击第一个 Python 技术的公众号,在这里我们就能看到这个公众号历史发布过的所有文章:
我们看到这里文章每页只显示五篇,一共分了31页,现在我们再打开自带的开发者工具,然后在列表下面点下一页的按钮,在网络中会看到向服务发送了一个请求,我们分析下这个请求的参数。
通过请求参数,我们大概可以分析出参数的意义, begin
是从第几篇文章开始,count
是一次查出几篇,fakeId
对应这个公号的唯一 Id,token
是通过 Cookie 信息来获取的。好了,知道这些我们就可以用 Python 写段代码去遍历请求,新建文件 gzh_download.py
,代码如下:
# gzh_download.py# 引入模块import requestsimport jsonimport reimport randomimport timeimport pdfkit# 打开 cookie.txtwith open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"#请求公号平台response = requests.get(url, cookies=cookies)# 从url中获取tokentoken = re.findall(r'token=(\d+)', str(response.url))[0]# 设置请求访问头信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=" + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 循环遍历前10页的文章for j in range(1, 10, 1): begin = (j-1)*5 # 请求当前页获取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin="+str(begin)+"&count=5&fakeid=MzU1NDk2MzQyNg==&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 获取到返回列表 Json 信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍历当前页的文章列表 for i in list: # 将文章链接转换 pdf 下载到当前目录 pdfkit.from_url(i["link"], i["title"] + ".pdf") # 过快请求可能会被微信问候,这里进行10秒等待 time.sleep(10)
好了,就上面这点代码就够了,这里在将 URL 转成 PDF 时使用的是 pdfkit
的模块,使用这个需要先安装 wkhtmltopdf
这个工具,官网地址在文末给出,支持多操作系统,自己下载安装即可,这里就不再赘述。
安装完后,还需要再执行 pip3 install pdfkit
命令安装这个模块。安装好了,现在来执行下 python gzh_download.py
命令启动程序看下效果怎么样。
看来是成功了,这个工具还是很强大的。
总结
本文为大家介绍了如何通过分析公众号平台的功能,找到可以访问到某个公众号所有文章的链接,从而可以批量下载某公众号所有文章,并转为 PDF 格式保存到本地的目的。这里通过 Python 写了少量代码就实现文章的抓取和转换的工作,如果有兴趣你也可以试试。
参考
https://wkhtmltopdf.org/downloads.html
【代码获取方式】
识别文末二维码,回复:666PS:公号内回复「Python」即可进入 Python 新手学习交流群,一起 100天计划!-END-Python 技术关于 Python 都在这里
python response重头开始_用 Python 抓取公号文章保存成 PDF相关推荐
- dataframe保存为txt_竟然可以用 Python 抓取公号文章保存成 PDF
. 游戏的多维数据集的形状概念 Python技术 人生苦短,我用 Python! 今天为大家介绍如何将自己喜欢的公众号的历史文章转成 PDF 保存到本地.前几天还有朋友再问,能不能帮把某某公众号的文章 ...
- 用 Python 抓取公号文章保存成 PDF
今天为大家介绍如何将自己喜欢的公众号的历史文章转成 PDF 保存到本地.前几天还有朋友再问,能不能帮把某某公众号的文章下载下来,因为他很喜欢这个号的文章,但由于微信上查看历史文章不能排序,一些较早期的 ...
- python日志保存为html文件,用 Python 抓取公号文章保存成 HTML
上次为大家介绍了如果用 Python 抓取公号文章并保存成 PDF 文件存储到本地.但用这种方式下载的 PDF 只有文字没有图片,所以只适用于没有图片或图片不重要的公众号,那如果我想要图片和文字下载下 ...
- python response重头开始_用 Python 修改支付宝运动步数,轻松 TOP1
来源:https://s.yam.com/cuZA7 大家好,我是盟主 今天分享的文章让你霸屏微信运动,横扫支付宝榜单 1 项目意义 如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又 ...
- keil生成hex文件找不到_骚操作!用Python把公众号文章打包成pdf文件,再也不怕找不到了...
背景 做自媒体的人,尤其是做了一年甚至更久的自媒体人,尤其是通过自媒体还有一些小收入的人,他们最怕自己的公众号内容因为各种原因而丢失,那就太可怕了! 在做自媒体内容上花了太多心血,如果突然一下就没了, ...
- python 爬虫课程推荐_关于递归抓取的课程推荐
Python爬虫包 BeautifulSoup 递归抓取实例详解概要:爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另一个 ...
- python淘宝爬虫_简单的抓取淘宝图片的Python爬虫
写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...
- 使用mitmproxy + appium + python 全自动抓取公众号文章
[转载请注明出处]:https://blog.csdn.net/huahao1989/article/details/106180223 1. 先使用mitmproxy代理抓微信公众号历史文章列表 实 ...
- 分享一款自动抓取公众号文章的工具
1. 自己手工打造的工具 测试链接:http://mhtclub.com/html2richtext/ 在下面输入框输入想要抓取的公众号文章,点击获取文章内容,即可获取文章内容.目前支持抓取 http ...
最新文章
- java 访问手机存储卡,Android App将数据写入内部存储和外部存储的示例
- mysql时间格式函数_MySQL时间格式函数
- CCNP学习笔记15-RSTP
- 将json字符串转换为json对象
- android获取根视图
- Android 热补丁实践之路
- 2019年春季学习第七周学习总结
- 2019运输科技领域最新SCI期刊影响因子正式发布,附三年IF变化趋势!
- northwind数据库mysql下载_SQLEXPRESS 2012 安装NorthWind和Pub数据库
- 语雀小记初长成:碎片化信息记录工具
- python 之 arrow
- 古代官员常用计算机笔,古代官员也有年终奖清朝皇帝一般会赏赐
- 四川大学计算机学院硕士毕业要求,四川大学计算机学院(软件学院)2020年非全日制硕士研究生接受调剂生的通知...
- 【CodeForces727E/CF727E】Games on a CD (字符串哈希)
- 【Cxinny】数据结构与算法
- Tablayout设置间距
- 罗技驱动为什么无法识别我的鼠标?
- nitro库_Nitro的故事,专业的翻译服务,可帮助开发人员进行本地化和多语言支持...
- CEO、COO、CFO、CTO 是什么意思
- linux系统DNS服务器设计报告,linuxdns服务器配置实验报告
热门文章
- Linux Linux开发 Linux高级编程 Linux文档
- gcc学习与实践(2)
- mysql授权许可_分析MySQL的授权许可
- python中流程图的基本元素_面试干货:成为Python程序员的终极指南!(内附回答)...
- Qt信号和槽的连接--发射信号而槽未响应
- 错误C2398:从“double”转换为“float”需要缩小转换
- 做了n年程序猿,才知道电脑是这样工作的
- Glib2之GType和gpointer类型(十三)
- PulseAudio VS AudioFlinger(七)
- C++ map()和pair()用法