目的
目的是抓取指定公众号的文章和评论,希望程序能跨平台,尽量不实用依赖 mac 和 win 这种本地库的 python 代码。
方案
这篇文章写作于2025 年
微信已经反爬很多年了,可能的方案如下
❌ 1. 搜狗那套早就不更新了
❌ 2. 直接 request 接口,微信各种认证,一开始就搞不定
❌ 3. 基于 selenium 的各种浏览器自动化,如何拿到http接口呢?
❌ 4. 基于 https 代理,比如 mitmproxy 的方案,微信的文章内容和评论不走 https 了,根本抓不到包(基于 mitmproxy 我确实没看到微信流量,如果有这种方法,欢迎留言告知,微信也行 j@ckflit@替换为 a)
✅ 5. RPA 方案,比如 pyautogui,模拟用户操作,抓取文字,理论上万能,实际也只能这样
✅6. 高级 RPA 方案,基于系统依赖的底层 API,找到窗口,辅助访问等接口,有方案 5 搞不定又必须得再考虑这个,或者确定用某个平台也可以
流程
pg(pyautogui的简称)搜索指定公众号,打开公众号文章列表
列表页根据文章 item 的左上角图像,找到位置,然后判断是否重复,合理,如果合理,则抓取文章页
文章页抓取文章标题,内容,评论,链接(链接可以用于排重,浏览器可以打开,但是只有内容,没有评论,评论只能在微信内部看)
难点
1. 定位位置用locateOnScreen,这个函数,相关参数是基于物理分辨率的,比如 mac,可能物理分辨率是 3000,逻辑分辨率是 1500,这里要注意。比如 mac 下,这个函数的返回值要除以 2,输入的图像是基于物理分辨率的,坐标也是要 X2,请注意系统默认的截图快捷键截取的就是基于物理分辨率的截图,pg 的 screenshot 返回的可能是基于逻辑分辨率的,这块需要先做好测试,理解好。
2. locateOnScreen 的返回值,可能是错的,可能有一点偏差,这种细节要处理,实在不放心,自己手搓一个函数
3. 文章页,评论啥的要兼容各种情况,评论里有多层,需要点开
4. pg 的 scroll,press,hotkey 得仔细测试,可能有各种跟你预想不一样的情况,需要自己摸索