其实这个是我个人的毛病,接触新语言第一反应是找熟悉的插件,有现成的插件,这样子工作效率事半功倍。那UiBot本身的能力说实话很少,借助python丰富的开源插件库,就基本没啥搞不定的了(PS:你就当python加个壳吧)。看着UiBot的数据采集都是依赖于浏览器引擎,浏览器采集有冗余加载、渲染、单线程等时间开销,这就限制了数据采集过程是非常缓慢的。因此想整个垂直爬虫的插件不依赖浏览器。就先随便拿个模块先试试水。
jsonPath就是这么一个工具,个人工作性质对cssSelector,jsonpath,xpath,正则,处理非常多。这些工具用好大大减少工作量。
看了官网python教程,依葫芦画瓢整理一下。实际过程就是:
1、把python依赖模块放到UiBot\lib\site-packages,熟悉python的都知道,这其实就是python的运行库目录。
2、把调用方法自己简单封装一下,暴露给UiBot调用(PS:甚至不用封装,py里面from …… import的方法直接可以用)
我就把我的集成步骤说一下:
1、python的JsonPath地址:
https://github.com/kennknowles/python-jsonpath-rw
当然你的先安装python3环境,这个自行百度。然后安装jsonpath模块:
pip install jsonpath-rw 安装完成后开始搬运,找到你python环境模块的目录(PS:一般是python根目录\lib\site-packages下面,安装命令里面也可以看到),这里面找到jsonpath_rw文件
比如我这里就放在,这里
重中之重:依赖库, 我就是仔细看jsonpath的依赖库,然后在UiBot上调试了半天,都是报参数个数错误。犯这种低级错误,郁闷死我了。看到没,依赖这三个库!
依赖库同样在python根目录\lib\site-packages下面,拿出来一起丢到UiBotCreator\lib\site-packages下面。
2、对外暴露接口,丢到UiBotCreator\extend\python下面。
from jsonpath_rw import parse
def exe(json, expression, action=None):
if action != None:
return [str(match.full_path) for match in parse(expression).find(json)]
else:
return [match.value for match in parse(expression).find(json)]
if __name__ == '__main__':
json = {'foo': [{'baz': 1}, {'baz': 2}]}
print(exe(json, 'foo[*].baz'))
(PS:插件模块是在第一次调用时编译pyc文件的,放在UiBotCreator\extend\python\__pycache__下面,同时生产对应的info文件。这里不知道是不是没有处理,反正我每次修改后,要手动删除pyc文件,否则修改不会自动编译。另外一个好玩的事情就是上面说的,会自动暴露from …… import导入模块的方法,不信你可以看info文件)
这里还有一个技巧,没有info文件生成,模块就写的有问题。
这里parse就是对外暴露的引进来的模块方法。
3、最后是编码,因为习惯这里文件我默认都会注意UTF-8编码,所以忽略,小白一定得注意。Window、Unix的UTF-8无BOM格式都行。
前后因为这个依赖库搞了半小时,总结起来:
注意依赖,注意编码,就行了。
后面想把pyspider搬过来,也搞搞垂直爬虫。
附件为JsonPath插件,直接解压到UiBot根目录即可使用。
上传的附件: