WEBAPI连接器

连接器简介

1. WEBAPI(网页转API)是什么?

webapi是易源的一个html抓取转换产品,它可以根据规则,将获取到的html文本重构成您需要的数据格式,并为您提供api调用。 您可以使用我们的web2api转化几乎所有的网站为api,而且并不要求您会编程(高级的转化除外)。

webapi解决的问题:

第一、帮助数据使用者容易地获取资料。网页HTML是非结构化的形式(HTML虽说是DOM形的结构,但是离清晰简单的结构化数据还是有很大差距。) 对于不少人来说,他们有分析资料的能力,但缺乏获取资料的方法,比如手动把网站资料录入excel,因为他们不知道如何把html抽取成可用的数据。而易源的webapi可以简化这件事,帮助您高效地利用数据

第二、帮助用户构建api(比如A公司官网上有公告页面,通过WEBAPI可以把此页面转为API提供给第三方调用),从而可以轻易扩展手机APP、WAP版网站以及和企业合作者无缝交互数据

2. 常规数据抓取流程

    如果我们需要在政府招标网站上,采集招标信息将其存入MySQL,通常做法是这样的:

 

 

3. 面临的问题

  • 解析复杂

    各种编程语言提供DOM解析,可以获取节点值,但性能很低,而且通用性不够,因此大部份情况要配合正则解析。但是DOM和正则都有一定的学习曲线

  • 不方便测试

    在开发解析网页的程序时,每个字段、对象的解析生成,都需要在程序中断点,观察html及对应的解析结果,一个简单网页的解析需要花费不少的时间成本。

  • 网页结构变更导致程序代码变更

    目标URL返回的HTML并非一直不变,可能随着网站升级频繁变化。如果结构改变,那程序解析很可能报错而致流程中止,严重的会使客户端程序崩溃,因此客户端必须跟着网页变化而重新编码、打包、发布。

  • 流量、并发控制

    通常目标网页对访问流量、并发有一定的限制,如果自己控制访问,那就要编码实现并发控制。

  • 日志记录

    什么时候,什么IP访问了目标网页,出入参数分别是什么?这些日志都需要自己去打标和存储。

 

 

4.使用WEBAPI的解决方案

使用WEBAPI可以解决解析复杂、不方便测试、网页变更等问题。其使用流程如下:

1.使用WEBAPI连接器对目标URl做解析配置;提交审核(审核通过后才可使用); 

2.创建一个接口API,在接口下创建接入点POINT; 

3.接入点配置时,选择【WEBAPI连接器】,再选择第1步骤中通过的配置。

4.可以调用POINT了。

 

整体结构如下图:

 

 

 

其工作区介绍如下:

 

 

4.1 控制区

控制区有5个按钮,其功能分别为:

1.运行测试:在您写完配置后,单击此按钮进行抓取转化测试。测试结果将出现在每一块对应的显示框中。

2.保存:以草稿的方式保存配置。

3.提交审核:测试通过后,才可以提交审核。审核通过前,您的java/groovy回调代码是不会被执行的。审核通过后,当前创建的webapi即成为您的后端服务,您可以用此服务创建API了。

4.json:webapi配置完成后,最终生成一个json格式的文件。所有的ui都是为这个json服务,如果您对本配置流程已经很熟悉了,可以直接写json。

5.数据:点此按钮可添加解析的数据格式定义,分为常量、单对象、列表、分页4种。

4.2 基本信息区

1.名称:此webapi的名称。

2.描述:对此webapi的描述。

4.3 数据源区

数据源区域用户于配置抓取的目标地址及传入的参数。

 

1.抓取地址:目标url地址,可嵌入变量。

2.请求方法:get/post方法。

3.缓存时间:对此数据源转换后取得json结果的缓存时间,范围在10秒至12000秒。

4.请求头:发送请求时的http头部信息,可嵌入变量。比如嵌入cookie变量,即可穿透进入需要登录的页面。

5.html截取:由于解析是基于正则表达式,因此解析的文本越短越有利于效率提升。比如通常只需要网页局部的html片段。 系统默认实现用的是indexOf(),然后再substring()开始字符到结束字符间的串。使用正则可以提高灵活性,但对解析速度有影响。

6.请求参数:用户在请求需要传来的参数,也就是get或post过来的参数。在此一般需要填写变量,当然也可以写常量。比如查询某种固定类型商品时, 参数名称为type,值为20。如果需要写变量,则值域写${变量名},比如写${type},则用户调用时输入http://xxxxx?type=20,也就传入了20这个值。

7.测试数据:测试时,因为没有实际的用户输入变量值,因此只能模拟。这个域的作用就是模拟$符号对应变量的模拟值。比如上图中有一个${page}变量,我们在此为page变量模拟输入2, 则在测试时系统认为用户实际输入了page=2。

 

4.4 数据属性区

共分为4种数据属性:常量、单对象、列表、分页。

1.常量:有时接口返回的数据是固定的,比如某种【参数查询口】,只需要返回一个json或jsonArray常量即可,不需要解析html。

2.单对象:封装html局部片段,比如解析用户资料页面,其结构为:{name:'张三',age:29}。如下图所示即适合于用单对象结构来进行封装。

3.列表:封装html局部列表片段,比如新闻列表div下对应的所有li节点。既然是列表,肯定是有循环标志,比如< li >...< /li >为循环中的一条记录, 此种情况下 分隔匹配条件的开始就是< li >,结束就是< /li >。子项配置指的是在每一个循环元素内,如何截取属性,这里的截取方式和单对象属性的截取方式是一样的。

 

 

4.分页:封装html局部分页片段。和列表对象结构相似,只是加上了总条数、总页数、当前页、每页几条四个配置项。

 

4.5 java/groovy回调区

本回调具备强大的处理功能。您甚至不用配置上述抓取结构,直接用代码可以完成数据解析工作。请实现transform方法,它有三个参数,分别是:
【ret】:代表解析后返回的对象。比如您添加了一个名为“typeList”的常量对象,则ret.typeList即指向此对象;
【pageHtml】:由数据源获取,并经过开始和结束字符串截断的网页html源码;
【paraMap】:用户请求时传过来的参数,比如http://xxxx?name=abc,那么paraMap.name=="abc"。此paraMap包括了测试参数。

审核通过前回调方法不会被调用!

 

 

 

 

连接器功能(使用场景)

1.返回常量实例演示

 

1.首先我们来看一个接口,其地址为https://www.showapi.com/api/lookPoint/900 ,调用测试接口,显示如下图:

 

2.然后来看返回的信息是如何生成的,如下图:

 

 

 

2.返回单对象实例演示

我们现在来抓取https://www.showapi.com/help/go/contact页面中一部份,如下图所示:

 

2.1 第1步,配置数据源:

 

2.2 第2步,查看页面html源码

 

 

2.3 第3步,配置单数据解析对象

请注意:上述子项配置的抓取是有顺序的。

 

 

2.4 第4步,运行测试,查看抓取结果

 

2.5 第5步,编写回调,调整返回结果

在上图结果中,qq属性里有两个号码,您可能需要把它们切开做成数组或集合,那么可以通过回调来完成:

 

 

3.返回列表对象实例演示

我们现在传递京东一个查询参数,把返回内容抓取回来。例如输入:

http://search.jd.com/Search?keyword=iphone

其界面如下图所示:

 

3.1 第1步,配置数据源

 

3.2 第2步,查看页面html源码

 

 

3.3 第3步,配置列表解析对象

 

3.4 第4步,运行测试,查看抓取结果

 

3.5 第5步,编写回调,调整返回结果

 

 

4.返回分页对象实例演示

分页的抓取和列表流程完全一致,只是多了所有页面数、所有记录数、当前页数、每页多少条这4个属性,这4个属性匹配时不分顺序。示例配置如下图: