前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信公众号文章爬虫实践

微信公众号文章爬虫实践

作者头像
FunTester
发布2022-04-01 09:36:20
1.1K0
发布2022-04-01 09:36:20
举报
文章被收录于专栏:FunTesterFunTester

年前发了一篇FunTester公众号原创文章总结FunTester原创大赏,但是整理的时候却发现自己没有记录文章的发表日期,导致有一些文章由于发表日志过早(且排名靠前)影响了一丝阅读体验,所以我想了一个办法爬取了每篇文章的发表时间,在自己整理的Markdown文档中增加发表日期内容。

经过简单验证,决定使用接口爬虫功能来实现这个需求。

日期获取

经过页面的检查,发现的确存在发表日期的记录数据,隐藏在巨大的信息当中,不过有意思的是,微信公众号的公共访问内容居然全文只有一处日期且为真正的发表日期,所以也大大节省了我的时间。

下面是我的封装方法

代码语言:javascript
复制
    static def test(String url) {
        //        def url = "https://mp.weixin.qq.com/s/1UFooul_azwH8k0dylDv3A"
        def key = url.substring(url.lastIndexOf("/") + 1)
        def get = getHttpGet(url)
        def response = getHttpResponse(get)
        def res = response.getString("content")
        //        output(string)
        //        output(res)
        def all = Regex.regexAll(res, "20[1,2]\\d\\-\\d{2}\\-\\d{2} \\d{2}:\\d{2}")
        def s = all[0]
        output(key + PART + s)
    }

原创文章链接

下面分享一下我原来的记录Markdown文档的内容截取:

代码语言:javascript
复制

- [分布式性能测试框架用例方案设想(二)](https://mp.weixin.qq.com/s/bs65VVvRoB0AGyyfwSgT0w)
- [基于docker的分布式性能测试框架功能验证(二)](https://mp.weixin.qq.com/s/49fAcamsteo7yVjO8JmQrg)
- [分布式性能测试框架单节点内测](https://mp.weixin.qq.com/s/IwEQGC2rOgcT7deCWW4wDw)
- [分段随机实践—模拟线上流量](https://mp.weixin.qq.com/s/qUPhtG5lZIWx6oYrgwEuag)
- [性能测试框架对比初探](https://mp.weixin.qq.com/s/w46QciCvh6dPswBA42oiIQ)
- [性能框架哪家强—JMeter、K6、locust、FunTester横向对比](https://mp.weixin.qq.com/s/BGs3ImdkRGFB-h3fxUktmw)
- [分布式性能测试框架用例方案设想(三)](https://mp.weixin.qq.com/s/hkSn4g9Z3sfWIV9-dOiS7Q)
- [基于docker的分布式性能测试框架功能验证(三)](https://mp.weixin.qq.com/s/mBEuEWlrw_gwV0T6S93LKA)
- [10万QPS,K6、Gatling和FunTester终极对决!](https://mp.weixin.qq.com/s/HZvBPUEaws72hlwb1QXzuw)
- [单机12万QPS——FunTester复仇记](https://mp.weixin.qq.com/s/4IBaEpj3TEHY_2ZdGOON0g)
- [分布式请求放大器实现](https://mp.weixin.qq.com/s/JAzVyP2u9WicNXvVamBGYQ)
- [FunTester框架Redis性能测试之list操作](https://mp.weixin.qq.com/s/WBjPdpc4RNZ-rUXhS9qdSg)
- [全链路压测流量模型](https://mp.weixin.qq.com/s/nSJKvRgrh87LJjDQRBUtdw)
- [FunTester框架Redis性能测试之map&INCR](https://mp.weixin.qq.com/s/SJtD4mxOUCSfcSTfhbA5Jw)

思路就是分行去读,然后获取每一行的URL链接,然后调用爬虫获取日期,然后我先存在了本地,并没有使用LevelDB,原因是因为爬虫都是一次性的,没必要存在本地的LevelDB里面。其实保存的方式也在上面爬虫的方法中,就是通过日志输出,避免爬虫中断。

PS:这里休眠了3秒,避免触发反爬虫规则,自测是可行的。

代码语言:javascript
复制
    static def spider() {
        String path = "/Users/oker/IdeaProjects/funtester/document/directory.markdown"
        def line = RWUtil.readByLine(path)
        //        output(line)
        def key = false
        line.each {
            if (key && it.startsWith("- [") && it.contains("weixin.qq")) {
                String url = it.substring(it.lastIndexOf("]") + 2) - ")"
                //                output(url)
                test(url)
                //                fail()
                sleep(3.0)
            }
        }

    }

重写Markdown

我将爬取到的数据存在文件中,然后再读取到一个com.alibaba.fastjson.JSONObject中。再重新读取原来的Markdown文件,截取URL最后的一段(此段String也是JSONObject数据中的key),从JSONObject中去读到日期,然后拼接文案。

代码语言:javascript
复制
    public static void main(String[] args) {
        def string = RWUtil.readByString(getLongFile("wx"))
        def info = parse(string)
        String path = "/Users/oker/IdeaProjects/funtester/document/directory.markdown"
        def line = RWUtil.readByLine(path)
        line.each {
            if (it.startsWith("- [") && it.contains("weixin.qq")) {
                String url = it.substring(it.lastIndexOf("]") + 2) - ")"
                def key = url.substring(url.lastIndexOf("/") + 1)
                output("$it $TAB 发表于${info.get(key)}")
            } else {
                output(LINE + it + LINE)
            }
        }


    }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日期获取
    • 原创文章链接
      • 重写Markdown
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档