掘技 - 挖掘技术知识
掘技APP,平时业余开发的一个浏览技术内容的APP。没什么太大的技术含量,主要是靠后端爬取内容到数据库,APP上展示的一个流程。

开发目标
上下班路上,总会几个APP或者几个网站去来回切换,看一些技术类文章,由于来回切换比较麻烦,所以打算把这些网站数据、APP数据相关技术内容做个整合,全部由一个APP来显示,这样就能一个APP不用切换看各种技术文章了。
开发过程
首先整理数据,分析哪些网站的数据需要爬取页面,哪些可以直接使用其接口,分析网站的数据请求,如ajax或HTML等,再分析一些APP的请求,然后让程序直接调用。
-
对于需要爬取的数据(已经分析好其HTML的各个节点数据)
设计数据库(MySQL),找爬虫工具,把数据存到数据库。
- 创建数据库,建一张内容表,想在APP展示哪些数据,需要相应的存储哪些字段,数据类型等,例如如下内容表字段。

-
然后开始寻找爬虫框架,例如PHP的phpQuery、Python的Beautiful Soup 4等,然后开始搭建本地环境去测试爬取。
我采用phpQuery嵌入CodeIgniter 框架+MySQL的环境。
爬取流程比较简单,在HTML页面上查找dom元素分析需要的字段,然后写入数据库。
相关部分代码如下

-
在爬取的时候,要通过代码对数据进行容错、整理,保证正常执行完成,得到干净的数据存入数据库。
比如对HTML中的数据进行响应式适配,过滤掉广告之类的数据等等。
上面代码是批量爬之前网站上的旧数据。
对于新的数据,需要每天在文章的列表第1页,查询页面中的每一条是否在数据库中存在,如果不存在,说明这个是新文章,存到数据库,如果存在说明是旧数据跳过或直接停止掉。
对于这样的功能,就需要每天定时执行查找,这里用Crontab定时执行,比如每天晚上1点爬数据,就需要设定crontab:

-
APP接口的开发。以上功能完成并通过测试之后,就可以着手开发APP接口。
在框架中,新增Article控制器,新增两个方法,分别获取数据库的列表页及详情页,输出json。
部分代码如下:

- 关于网站和APP接口的分析
-
APP接口分析,通过相关APP接口拦截工具,进行抓包分析。例如Charles for Mac等,分析之后,看他如何鉴权或者有些东西是如何加密的,怎样正确的获取数据等,然后进行正确的接口参数匹配,分析出可用的接口,这里不做演示。
-
Web的接口分析,目前多数网站是前后端分离的,接口是通过js ajax进行调用的,返回相应的json或xml数据,我们就可以通过浏览器的审查元素进行分析,一个页面的接口都是哪些数据的调用,分析出我们所需要的接口,再分析其加密、验证等方式,得到有效的接口提供给APP使用。

- 整理所有的接口,进行APP的开发
-
汇集所有接口,进行分类合拢等整理。
-
进行APP的开发,关于APP的开发就不继续展开讨论,这里的APP比较简单。

在很早以前就做过类似的东西,那时候非常喜欢一个web网站的内容,但是该当时网站不支持响应式,没有APP,在手机上浏览时体验太差,所以,当时就主动爬取网站的数据,爬到的HTML进行样式的设置,屏幕的适配等,显示到自己开发的APP中,后来那个网站支持了响应式,可以在手机上正常浏览。