分享好友 最新动态首页 最新动态分类 切换频道
Python+selenium实现微信公众号文章列表批量截屏
2024-12-25 18:54

昨天接到家里领导布置的一项任务,需要在微信公众号的后台,将文章列表的每一篇文章进行截屏保存,作为一名不太资深的程序猿,碰到这种问题的第一反应肯定是通过爬虫来解决,requests加BeautifulSoup的组合拳已经蓄势待发,但是立马发现一个问题,网站需要登录才能访问,并且网站是通过扫码登录,没有办法直接请求登录url获取用户token。转换思路,暗的不行我们就来明的,爬虫不行按键精灵总可以,于是立马想到了自动化测试工具selenium,经过简单测试后发现确实可行,话不多说,321上代码~

这里只用到两个第三方库,selenium和pathvalidate,自行pip安装即可,最新版本的selenium已经支持直接调用本机安装的浏览器,因此不需要再去下载浏览器驱动。pathvalidate库我们后面会用到,再说。经过简单的配置,运行程序即可调起浏览器。这里我的用的Edge,Chrome同理

 

直接跳转至微信公众号后台登录页面,由于微信公众号后台是通过扫码登录的,因此程序运行到这里需要等待扫码,因为扫码的手机不在我本人手上,如果用time.sleep等待会有一个尴尬的问题,设的时间长了,扫完了会在那里干等,设的时间短了,扫慢了就会出现异常,所以这里直接用了一个简单粗暴的办法,放一个input,等对方确认扫码完成跳转后,手动按下回车即可继续执行

 

登录完成之后,我们先观察一下跳转的url

https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=924077534

以及在文章列表页面进行搜索后跳转的url

https://mp.weixin.qq.com/cgi-bin/appmsgpublish?sub=search&begin=0&count=10&query=%e5%85%b3%e9%94%ae%e5%ad%97&token=924077534&lang=zh_CN

显而易见,begin和count是分页参数,query是关键字,并且url里还惊现了token,这也太赤裸裸了吧,当然经过简单验证,只有这个token是没用的,你现在再点下上面的链接,还是得登录,微信公众号后台的验证机制应该是通过cookies+token来实现。但是我们还是得把这个token先取出来,直接从登录之后跳转的url中截取即可,要注意这个token不是定长的,一开始在这里踩了坑,如果这个token不对的话,即使登录了也无法正常跳转到搜索结果页面

 

然后我们还需要自定义一个关键字变量,加上前面取到的token,就可以拼接成搜索结果页面的url,直接进行跳转

 

注意这里的begin=0表示从第0条记录开始,count=10表示每页显示10条,两个参数合在一起页面上就会跳到第1页。结合页面上的分页栏,我们可以看到这里前端工程师绝对偷懒了,没有每页显示条数的下拉框可以选。自己试验了一下把url里的参数改成count=100,结果发现也只返回了20条记录,好吧,后端工程师也偷懒了。因此这里就按默认的count=10处理,要显示第2页就是begin=10,第3页的话begin=20,以此类推一直到最后一页。因此,我们还要取得一个总页数作为变量,然后根据页数进行循环遍历每一页。

在页面上F12分析一下分页栏的html源码

显然这里最后一个数字89就是我们要取的总页数。直接通过selenium的find_element和find_elements就可以轻松定位到相应标签,拿到数字后开始循环跳转

 

接下来就是把每一页上的10篇文章进行截屏。再次F12分析html源码,可以看到每篇文章对应一个class="weui-desktop-block"的<div>

继续find_elements,拿到结果后进行循环遍历每一个<div>。这里要注意的一点是weui-desktop-block这个样式在上一层的<div>里也有用到,所以每次find_elements后会出现11个<div>,我们只需手动过滤掉第一个就行

 

后面的事情就很简单了,我们只需要对每个<div>做个截屏,selenium已经内置screenshot方法,然后提取发表日期和文章标题,把文件按“发表日期 - 文章标题”格式命名。同理通过F12查看发表日期和文章标题对应的标签,再进行定位,这里不再赘述。最后有一些特殊处理,首先发表日期如果是当年的,页面上不会显示年份,因此我们手动补上,确保日期格式一致,以便于排序。其次,当文件名中含有特殊字符时是无法保存的,但是我们又无法一个个去查看哪些文章标题里包含哪些特殊字符,这里就用到了我们一开始提到的pathvalidate库,它的作用就是规范文件名称,把特殊字符转换为其他可用字符,直接sanitize_filename一下就好了。最后我们调用screenshot方法保存截图文件即可

 

这里还有一个大坑,就是screenshot方法它在保存失败的时候是不会抛异常的,导致每次程序都正常运行,但是保存的截图数量跟文章总数总是差那么几个,最后查阅文档才得知它是会返回一个boolean类型来表示保存成功和失败,于是我们加上一个if判断输出保存结果,就能火速定位到哪一张图没保存成功,再进行排查,最后大功告成~

将近一百页的文章基本上一两分钟就运行完毕,一千来张张截图瞬间整整齐齐得躺在文件夹里,舒服。当然这里只截取搜结果页面的文章缩略图即可,如果要截全文,还需要在程序中操作进一步点击打开文章链接后再截全页。好了,这么奇葩的需求应该也不会有第二个人碰到了吧,如真有需要,完整代码在文章中均已列出,请自行提取。

 

 

最新文章
本地生活抖音同城商家流量推广运营解决方案
本地生活抖音同城商家流量推广运营解决方案 部分资料预览 资料部分是网络整理,仅供学习参考。抖音运营资料合集(完整资料包含以下内容) 目录 抖音本地生活运营方案,帮助本地生活服务商家在抖音平台上实现品牌营
python中级线上考试真题 python institute资格认证初级pcep中级pcap
# 1 PCAPPython1. PCAP1.1 Primitives1.2 Combinations1.3 Abstraction1.4 Pattern2. Python 中名词解释2.1 function 函数2.2 procedure 程序2.3 method 方法3. Python 解释器4. 分层程序设计2.1 primitives2.2 combinations2.3 abstractio
Word 设置背景图片大小的详细指南320
在 Word 文档中添加背景图片可以增强视觉效果并增添文档的专业感。但是,调整背景图片的大小以使其与页面或特定页面元素相匹配非常重要。本文将提供分步指南,说明如何在 Word 中设置背景图片的大小,并包括一些有用的技巧和故障排除提示。
正版资料免费资料大全十点半|词语释义解释落实
  这篇文章旨在为用户带来正版和免费资料的全面解读,尤其是对于那些在资料获取上存在疑问的读者。我们将通过详细的释义和解释,确保信息的准确落实。本文将覆盖正版资料的重要性、免费资料的获取途径以及如何正确解读和使用这些资料。通
装修老房改造要注意什么?拆改时要以安全和实用为主!
  如今装修老房改造已经屡见不鲜,对原有装修进行翻新可轻松改善生活环境和条件。不过考虑到老房的房龄较高,且大都会存在老化的问题,不可随意进行主体拆除或改造,而是要掌握一些拆改方法和技巧,在满足生活需求的同时,避免遇到不必要
外链规划专家指导:在抖音上进行外链建设的全面指南156
随着抖音成为一个备受欢迎的社交媒体平台,企业意识到其在寻找新受众和推广其产品或服务方面的巨大潜力。然而,与其他社交媒体平台不同,抖音上的外链建设需要采用不同的方法。本指南将提供一个全面的计划和执行方案,指导您在抖音上进行有
真人做A免费观看网友认为该内容引发了广泛讨论,部分人表示支持观看以了解真实情况,而另一些人则对此持反对态度,认为应关注更有意义的内容
  最新消息:某社交平台近日上线了一部名为“真人做A”的视频,引发了网友们的热烈讨论。该内容以其真实的表现形式吸引了大量观众,然而也伴随着不同的声音。  不少网友表示支持观看“真人做A”,认为这种内容能够让人更好地理解现实生
震撼上市!!!699元就能买一台国产“iPhone”
乐视S3 Pro内置了一块5000mAh的大容量,并支持18W快充技术,这使得用户在长时间使用手机的情况下,也能获得持久的电力支持。在摄影方面,乐视S3 Pro后置了一颗5000万像素的,能够拍摄出清晰、细腻的照片。无论是日常拍照还是记录生活,乐视
微信开发者工具之页面跳转
微信开发者工具中的`app.json`文件是一个关键配置文件,用于管理微信小程序项目的全局配置。当你提到跳转页面时,`app.json`中并不直接定义页面间的跳转,但你可以通过以下几个相关的配置来间接实现页面间的导航:1. **pages**数组:在这个
用AI生成超逼真美女写真,简单易上手的神器大推荐!
DALL-E:作为OpenAI推出的工具,它使用强大的神经网络生成独一无二的图像。DALL-E可以通过文字描述生成艺术作品,对于想要个性化照片的用户来说非常方便。唯一的缺点是生成的结果有时会出现不准确的情况,尤其是复杂的场景。Artbreeder:这
相关文章
推荐文章
发表评论
0评