首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自己写一个爬虫,监测微信公众号

需要的背景知识

当然,翻墙也是必须的

因为要用到

就以自己的公众号作为例子吧

第一步是获取入口链接

搜狗的公众号搜索可以直接获得

很长

而且刷新页面后

两次搜索出来的时间戳和签名都不一样

这应该是微信的防爬虫策略

过一段时间后这个链接就会失效

不给你一个固定的入口

小问题

文末会解决

继续

打开后是这样

可以看到我的公众下最近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设置成每分钟一次

这样写完这篇文章的瞬间

应该就能爬到了

之后再改成每小时爬一次吧

够用就好

前面提的链接里包含动态时间戳和签名的问题

解决方案很是简单

每个公众号都有一个唯一的微信号

点到为止

生命在于运动

技术改变生活

相信我,我是工程师

。。。

。。。

。。。

。。。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181017G265QH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券