汕尾海湾 发表于 2024-5-18 18:23:57

aardio爬虫) 实战篇:采集自己的公众号粉丝列表

前言

只有自己封装库的时间,才知道造轮子有多累。之前使用Python的时间,基本都只需要import,随便哪个功能都有人写好轮子用。不外造轮子也有好处,可以了解一些比力基础的知识。
其实aardio也有许多已经造好的轮子可以用,只是因为只有作者在维护,而且没有一个活跃的社区,所以许多方面有些缺失,比如爬虫方面。但是aardio写一些小工具确实很方便,打包成exe也比力小,所以我来造这个轮子。
文中使用到的aardio库都可以到github下载:https://github.com/kanadeblisst00/aardio-extlibs
需求阐明

之前写的一个视频号下载工具为了给公众号涨粉,对接了公众号后台,需要给后台发送消息获取使用码才气使用。开始使用码有效期是一天,后面改成了七天。
但有些人还是觉得有点麻烦,想让我弄成永世。我就怕改成永世后,许多人白嫖完就取关了,那对我也没什么好处。所以想用每个人的openid作为永世使用码,只要填一次,软件启动时会连接我的服务器验证这个openid对应的用户有没有取关。
如许对于用户而言就不需要去公众号后台发送消息这一步骤,可以省点事。不外这对我而言倒是增加了不少工作量。那起首需要一个获取公众号粉丝的openid列表的程序。
功能先容

固然微信公众平台开放了API,但是许多接口订阅号都用不了,比如获取粉丝列表,不外我们可以在后台看到,那用爬虫也能实现。下面是大概的界面内容:
https://img2024.cnblogs.com/other/1914604/202404/1914604-20240429144933596-1777195029.png
界面只会显示当前页的内容,假如想看全部的数据,可以到当前文件夹下的公众号粉丝.csv里检察。采集的所有数据都会保存到里面(注意:假如还在采集你就打开的话,采集程序将无法保存到里面而失败)
打包后的程序也很小,只有2M多。假如用upx压缩一下会更小,但是压缩后更容易报毒,所以我现在基本都不压缩了。
https://img2024.cnblogs.com/other/1914604/202404/1914604-20240429144934027-556321253.png
开源地址

代码是完全开源的,你可以在github下载。假如需要编译好的软件可以公众号后台发送获取粉丝列表
https://github.com/kanadeblisst00/CrawlBizUsers
采集思路

微信公众平台后台的接口都没有加密,只要抓个包就能请求,
https://img2024.cnblogs.com/other/1914604/202404/1914604-20240429144934533-284552894.png
用我封装好的kirequests库请求如下:
import kirequests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
var session = kirequests.session(headers,,cookies);
var url = "https://mp.weixin.qq.com/cgi-bin/user_tag"
var params = {
        "action": "get_user_list",
        "groupid": -2,
        "limit": 20,
        "offset": 0,
        "token": token,
        "lang": "zh_CN",
        "f": "json",
        "backfoward": 1,
        "ajax": 1,
        "random": "0." + ..string.random(16, "0123456789"),
        "begin_openid": "xxxxxxxxxx",
        "begin_create_time": 11111
}
var resp = session.get(url,params);
var datas = resp.json()获取cookies

采集比力麻烦的是cookies的获取方式。看一些项目获取cookies的基本都是让用户自己填,有的方便一点的会主动获取欣赏器的cookies。
假如让用户自己填的话会提高使用门槛,假如获取用户欣赏器的cookies又比力麻烦,Python有现成的库可以做到,aardio还要自己实现,而且获取用户cookies这种也比力敏感。
所以我这里直接开一个欣赏器,然后访问微信公众平台的登录页面,让用户扫码登录,然后获取cookies后主动关闭欣赏器,开始采集。如许用户只需要一个扫码的过程。
开启欣赏器

aardio中开启欣赏器有非常多种方式,详细可以看范例-》Web界面:
https://img2024.cnblogs.com/other/1914604/202404/1914604-20240429144934886-474749193.png
这里我选择web.view来做,这个比力轻量(因为用的系统API,类似安卓的Via那种模式),它是基于微软的WebView2,win10和win11系统基本都自带了这个东西。后面我要实现的欣赏器驱动程序(类似Python的drissionpage)也是用的这个来实现。
import web.view;

var webView = web.view(winform);
var url = "https://mp.weixin.qq.com";
webView.go(url);假如是已经登录的请求,url会跳转到https://mp.weixin.qq.com/cgi-bin/home,所以这里只需要循环判断一下链接有没有变成这个
var doJavasciptCode = function(webView, code){
        var jscode = "(function(){"+code+'\n})()';
        var result;
        webView.doScript(jscode, function(r){
                result = r;
        }
        )
        while(!result){
                win.delay(10);
        }
        return result;
}

var getLoctionHref = function(webView){
        return doJavasciptCode(webView, "return document.location.href;");
}
var curUrl = getLoctionHref(webView);
while(!string.find(curUrl, "@https://mp.weixin.qq.com/cgi-bin/home")){
        win.delay(500);
        curUrl = getLoctionHref(webView);
}然后开始获取cookies,获取到的cookies格式是一个数组,数组每个元素都是一个cookie字典,有name、value等字段。直接将它传给kirequests即可,不需要做什么处理
var getCookiesArray = function(webView){
        var result = webView.cdp("Network.getCookies");
        var cookies = result.cookies;
        return cookies
}
var cookies = getCookiesArray(webView);
var session = kirequests.session(,,cookies);然后只需要不停翻页就能获取全部的公众号粉丝列表了
清除cookies

假如采集完数据,想要删除webview的cookies,可以删除C:\Users\用户名\AppData\Local\aardio\webview2\user-data下面的文件夹,这个就是webview默认的缓存目录
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: aardio爬虫) 实战篇:采集自己的公众号粉丝列表