竟然可以用 Python 抓取公号文章保存成 PDF
off999 2024-12-01 02:18 24 浏览 0 评论
、
Python技术
人生苦短,我用 Python!
今天为大家介绍如何将自己喜欢的公众号的历史文章转成 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 写了少量代码就实现文章的抓取和转换的工作,如果有兴趣你也可以试试。
python学习资料获取方式
右上角点击关注
评论区任意评论或者转发一下
做完1、2步,私信回复“学习”
私信不要多字,不要少字,不要错字,私信方法:点击我头像,进入主页面,右上角有私信功能,在关注的上方位置。
相关推荐
- 电脑复制粘贴不了是怎么回事
-
电脑无法复制粘贴原因分析及解决方法:如果是中病毒的话,会有以下的这些情况:1、系统不能上网,例如宽带账号无法登录,qq登录不上,网页无法打开。2、复制粘贴功能失效。3、电脑任务栏上的信息不能显示。4、...
- win7一键烟雾头(win7烟雾头设置)
-
要调整Win7系统的烟雾头,首先需要打开“显示设置”窗口,在这个窗口中可以找到“分辨率”、“屏幕比例”等选项。接着,在“高级设置”中找到“显示适配器属性”选项,点击进入。在这个界面中,可以找到“3D设...
- win7系统一键装机下载(w7一键安装操作系统)
-
可以在温十系统电脑上下载温七装机系统,但需要按照正确的步骤进行安装。以下是一个可能的安装步骤:1.在温十系统电脑上下载温七装机系统的ISO文件,可以从互联网上下载,也可以从其他媒体(如DVD或USB驱...
- qq互联管理中心(qq互联管理中心是干什么的)
-
QQ互联是基于Discuz!云平台的一项服务,因此在开通QQ互联之前首先需要开通Discuz!云平台。在Discuz!X2中已经内置了云平台和相关服务,无需安装,在后台直接开启即可。可以呀,有...
- win10新加固态硬盘怎么设置(win10加装固态后需要设置什么吗)
-
安装固态硬盘后,您可以按照以下步骤设置Win10系统:1.连接固态硬盘:将固态硬盘插入主板上的SATA数据线接口,并使用电源线将其连接到电源供应器上。2.启动电脑:开机后,进入BIOS设置界面。通...
- 戴尔电脑无法开机怎么解决(戴尔电脑无法开机怎么解决方法)
-
1、电源故障当遇到戴尔电脑开不了机的情况,首先是检查是否电源问题,看电源和插头是否存在没有插好的问题。可以使用同型号的电源试一下,重插电源之后,看看是否能够开机,如果换别人的电源能开机的话,那就是电源...
- 新风系统管道安装图片(新风系统安装管道布置)
-
新风管道安装与验收标准—安装步骤1.按照设计图纸确定新风管道的走向及管道的规格(管径、材质等)。2.截取新风管道要使用专用截管工具,并将断面口的毛刺、毛边打磨光滑,确保截口断面平整且垂直于管轴线。...
- win732下载装机版(win732 下载)
-
32位系统安装方法如下1.下载win732位系统iso镜像到本地,不要放桌面或C盘,右键使用WinRAR等工具2.将win7.gho文件和Onekeyghost工具放到同一目录,比如D盘,不要放C...
- 惠普平板笔记本二合一(惠普平板笔记本二合一开不了机怎么办)
-
首先单击Office按钮,在下拉菜单中单击选择“打印”;2.在“打印”对话框中单击勾选“手动双面打印”复选项,再单击打印按钮进行打印;3.Word会先把1、3、5……等单页的内容发送到打印机打印;4....
- 台式机显卡天梯(笔记本显卡排行天梯图)
-
丽台显卡性能排行第一的是:丽台QuadroRTX8000第二是:丽台QuadroP620第三的是:丽台QuadroP2000第四是:丽台Quadrop4000第五是:丽台Quadrop1...
- win7更换壁纸(win7更换壁纸显示黑色)
-
1、首先点开桌面左下角的开始按钮然后在弹出的界面中找到控制面板并打开。2、在控制面板界面的个性化专栏中找到在找到屏幕保护程序并打开。3、在打开的新界面中找到屏幕保护程序并将选项更改为“无”保存后就完成...
- 如何获取windows7正版(如何获得正版win7)
-
关于这个问题,获得Windows7激活密钥的方法有几种:1.在购买Windows7时,通常会附带一张带有激活密钥的正版产品密钥卡。您可以查看产品盒内的卡片或说明书,以获取此密钥。2.如果您购买...
- 重装系统win7旗舰版62位(如何用重装系统win7旗舰版)
-
要重装Windows7系统,可以按照以下步骤进行操作:1.准备计算机:确保计算机已经安装了Windows11操作系统,因为Windows7的兼容性问题可能会影响安装过程。如果计算机上没有安装W...
- tp link app(TP LINKapp下载)
-
tplink手机app官方版是一款专为TP-LINK路由器手机设置应用,能够更好的管理TP-LINK路由器。tplink手机客户端特色1.实时获取路由器状态消息2.本地管理局域网内的TP-LINK路由...
- 如何彻底关掉windows更新(如果关闭windows更新)
-
方法一:Windows设置 要想关闭Win10自动更新,比较简单的一种方法就是进入到Windows设置中,将Windows更新直接关闭。步骤如下: 1、按“Windows+I”键,打开Wind...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
