Code change the world and make it better!

掘技 - 挖掘技术知识

Programming _ Sep 01, 2018

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

基本通讯流程图

开发目标

上下班路上,总会几个APP或者几个网站去来回切换,看一些技术类文章,由于来回切换比较麻烦,所以打算把这些网站数据、APP数据相关技术内容做个整合,全部由一个APP来显示,这样就能一个APP不用切换看各种技术文章了。

开发过程

首先整理数据,分析哪些网站的数据需要爬取页面,哪些可以直接使用其接口,分析网站的数据请求,如ajax或HTML等,再分析一些APP的请求,然后让程序直接调用。

  1. 对于需要爬取的数据(已经分析好其HTML的各个节点数据)

    设计数据库(MySQL),找爬虫工具,把数据存到数据库。

  • 创建数据库,建一张内容表,想在APP展示哪些数据,需要相应的存储哪些字段,数据类型等,例如如下内容表字段。
Content table
  • 然后开始寻找爬虫框架,例如PHP的phpQuery、Python的Beautiful Soup 4等,然后开始搭建本地环境去测试爬取。

    我采用phpQuery嵌入CodeIgniter 框架+MySQL的环境。
    爬取流程比较简单,在HTML页面上查找dom元素分析需要的字段,然后写入数据库。
    相关部分代码如下

phpQuery
  • 在爬取的时候,要通过代码对数据进行容错、整理,保证正常执行完成,得到干净的数据存入数据库。

    比如对HTML中的数据进行响应式适配,过滤掉广告之类的数据等等。

    上面代码是批量爬之前网站上的旧数据。

    对于新的数据,需要每天在文章的列表第1页,查询页面中的每一条是否在数据库中存在,如果不存在,说明这个是新文章,存到数据库,如果存在说明是旧数据跳过或直接停止掉。

    对于这样的功能,就需要每天定时执行查找,这里用Crontab定时执行,比如每天晚上1点爬数据,就需要设定crontab:

crontab -e
  • APP接口的开发。以上功能完成并通过测试之后,就可以着手开发APP接口。

    在框架中,新增Article控制器,新增两个方法,分别获取数据库的列表页及详情页,输出json。
    部分代码如下:

文章列表接口
  1. 关于网站和APP接口的分析
  • APP接口分析,通过相关APP接口拦截工具,进行抓包分析。例如Charles for Mac等,分析之后,看他如何鉴权或者有些东西是如何加密的,怎样正确的获取数据等,然后进行正确的接口参数匹配,分析出可用的接口,这里不做演示。

  • Web的接口分析,目前多数网站是前后端分离的,接口是通过js ajax进行调用的,返回相应的json或xml数据,我们就可以通过浏览器的审查元素进行分析,一个页面的接口都是哪些数据的调用,分析出我们所需要的接口,再分析其加密、验证等方式,得到有效的接口提供给APP使用。

查看某网站接口
  1. 整理所有的接口,进行APP的开发
  • 汇集所有接口,进行分类合拢等整理。

  • 进行APP的开发,关于APP的开发就不继续展开讨论,这里的APP比较简单。

掘技部分功能

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