需要的背景知识
当然,翻墙也是必须的
因为要用到
就以自己的公众号作为例子吧
第一步是获取入口链接
搜狗的公众号搜索可以直接获得
很长
而且刷新页面后
两次搜索出来的时间戳和签名都不一样
这应该是微信的防爬虫策略
过一段时间后这个链接就会失效
不给你一个固定的入口
小问题
文末会解决
继续
打开后是这样
可以看到我的公众下最近10条文章
查看源代码
发现内容隐藏在javascript里
这就需要用到万能的importxml了
=clean(importxml(A2,"//script[8]"))
获取第9个script里的不带格式的文本
看着这一堆乱七八糟的数据
感觉无从下手啊
需要做一些手术
还好我从小动手能力就不错
咦
好像第一步后面没写第二步
第二步是原始数据获取
现在已经第三步了
数据清理
=transpose(SPLIT(B2,"}"&","&"{"))
找了一个合适的分隔符
},{
把大数据分割成小数组
第四步
关键数据提取
=query(B:B,"select B where B matches '.author.*'")
这就比较高级了
里面涉及到了sql和正则表达式
知识点
对剩下的几个元素做一样的操作
处理完成后就可以抛弃原始数据了
等等
还需要继续优化一下
=REGEXEXTRACT(C3,"\Dauthor\D:\D(.*)\D")
之后就会看起来像这样
离完美只差一步了
因为我们还需要文章全文
随便打开一片文章
发现竟然是明文的
这时候不用xpath更待何时
=clean(TRANSPOSE(QUERY(TRANSPOSE(transpose(importxml(I3,"//div[@id='js_content']/p"))),,1000)))
恩
这个公式比较复杂
解释一下就是因为直接import出来的结果
是一个竖着的数组
前面那一串炫酷的操作可以把数组先从竖变横
然后合并为一
看起来就好多了
为了验证这个工具具有普适性
换了一个公众号的链接来替换入口链接
完美,发现竞争对手。。。
人家名字取得比我早
月发文也比我多
哎
现在起点高的人都那么努力么
不禁开始反思自己
到此为止了吗?
当然不
我们要写的是爬虫
要自动化的每时每刻都抓取的机器人
革命尚未成功
程序员仍需努力
新建个数据库表
然后对最新的10条进行判断
是否已经存在数据库
=countif(DataBase!B2:B,H3)
这里选取了标题
毕竟一个公众号作者很少写两篇标题一样的文章
我除外
这里不能用链接
因为链接是带时间戳的变化的
比较完备的方案是同时对比标题和正文
那有点过度消耗谷歌的服务器资源了
还是先略过
这下真的是最后一步了
本文的精髓就在这
直接复制黏贴了上一篇文章里的
能自动运行的代码
真懒
明明可以利用现有的除重参数进行优化的
不过还是加了一段判断数据有效性的代码
因为谷歌有时候不稳定
抓取的数据可能是出错的
会显示成
#ERROR!
这就不要了,删除,重新爬
先把trigger设置成每分钟一次
这样写完这篇文章的瞬间
应该就能爬到了
之后再改成每小时爬一次吧
够用就好
前面提的链接里包含动态时间戳和签名的问题
解决方案很是简单
每个公众号都有一个唯一的微信号
点到为止
生命在于运动
技术改变生活
相信我,我是工程师
。。。
。。。
。。。
。。。
领取专属 10元无门槛券
私享最新 技术干货