前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能推送LeetCode中文站点题目思路解析

智能推送LeetCode中文站点题目思路解析

作者头像
公众号guangcity
发布2019-09-20 15:30:55
8050
发布2019-09-20 15:30:55
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

智能推送LeetCode中文站点题目思路解析

0.导语

今天想到了一个需求:抓取Leetcode题目,并将其推送到打卡群中!比如:每日一题~

这个需求很简单,但是实现起来呢,呵呵。大家可以尝试一下,不过总体而言,还是爬虫的套路!

那么今天这篇文章,无代码,纯思路,剥茧抽丝,一步步深入研究。

1.中文站与英文站

大家都知道leetcode有中文站点,也有英文站点,这次爬虫指的哪一个呢?

最后的结论是抓取的中文站点,相对于英文站点而言,中文站点要一些!

如果自己实力有限,推荐大家先从英文站点尝试,再来中文站点。

两者的区别在于,中文站点多了一个翻译

2.全部题名获取

首先第一步获取中文站点的所有题名!

这里的题名包含两部分,一部分是中文的,一部分是英文的。

如下两图所示:

中文题名:

英文题名:

中文题名获取是通过post请求,英文题名是通过get请求。经过对比,可以得到中文题名的id与英文题名id一致时候,就代表英文翻译为中文,比如:页面上的两数之和就对应英文的two-sum

经过上述题名获取,现在就需要获得每个题名对应的具体内容与题目解析。

3.题目内容

点击题目,进入题目的具体详情页面,通过f12里的xhr,我们发现基本内容都在graphql(上述的中文post获取也是这个,url都不变)中!如下图所示:

此时通过分析json数据格式,便可以获取到页面的内容,随后做一些处理即可。

处理过程中的难点问题在于:如何同页面呈现一样!

你获取的内容很乱,如下图所示:

怎么处理呢?

首先看到这里面有很多html标签,那么思路来了只要将这些内容从html转为markdown后,便可以实现同页面呈现类似的无多余字符串,格式不会很乱的效果!

但是问题又来了,你会发现此时的url是通过换行符断开了,markdown里面的所有图片404了,哈哈~

此时莫慌,正则来了,直接正则匹配一下,然后做替换即可!

最后贴一张,最终存储的样板:

4.题目解析

在做完题,我们要参照标准答案,那么如何获取标准答案,也就是题目解析呢?

当你点击解决方案后,会在xhr中出现solution/,那么这个便是解决方案页面,此时你去看请求,会发现是get方式,而且get的内容全为markdown语法内容,这不简单,我心一想,so easy,直接存储为markdown格式就可以啦!

题目解析内容,如下图所示:

事实并非如此,重点中的重点来了:你打开markdown内容,在原页面呈现的代码,在你的markdown里面则是iframe标签内容,根本加载不出来代码内容!

这又是为何?

继续去xhr,找到了一串串graphql,而这里面便是代码,如下图所示:

看到了代码,欣喜若狂!然后post数据,使用正则匹配找到iframe标签,直接做替换即可得到所有的代码。

效果图:

5.本地数据

题目

数据存储

文件内容

题目解析

数据存储

文件内容

检查完整性

本地数据:

网页数据:

对比发现都是996,数据完整!

6.智能推送

直接模拟群发知识星球或者利用itchat群发消息即可实现上面内容的发送,如何定时保证每日都会接收到,那直接放在服务器上运行就行了。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 智能推送LeetCode中文站点题目思路解析
    • 0.导语
      • 1.中文站与英文站
        • 2.全部题名获取
          • 3.题目内容
            • 4.题目解析
              • 5.本地数据
                • 网页数据:
                  • 6.智能推送
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档