简介
spider-flow 是一个爬虫平台,以图形化方式定义爬虫流程,无需代码即可实现一个爬虫
特性
- 支持css选择器、正则提取
- 支持JSON/XML格式
- 支持Xpath/JsonPath提取
- 支持多数据源、SQL select/insert/update/delete
- 支持爬取JS动态渲染的页面
- 支持代理
- 支持二进制格式
- 支持保存/读取文件(csv、xls、jpg等)
- 常用字符串、日期、文件、加解密、随机等函数
- 支持流程嵌套
- 支持插件扩展(自定义执行器,自定义函数、自定义Controller、类型扩展等)
- 支持HTTP接口
插件
- redis插件
- mongodb插件
- IP代理池插件
- OSS插件
- OCR插件
- Selenium插件
踩过的坑
有些页面是通过ajax,异步加载再渲染的。就需要用到,selenium插件。但是每次执行都会打开一个测试的chrome浏览器。如果是遍历几十或更多数据就会电脑卡死。经过多方咨询了解到可以使用。selenium的toUrl函数 ,使用方法在执行函数空间中写 ${resp.toUrl('https://www.baidu.com')},这样做后,确实是在同一个浏览器跳转,节省的资源,以为问题解决了,我太年轻了,后面才发现,经过toUrl后resp只能存在新的一个,也就是说抓取了好几个页面但是最后输出都是相同的,是最后一个页面响应的值。
不死心再次尝试 将每个页面的resp结果,放到一个数组中。发现还是不行,经过咨询知道,只要通过了toUrl,resp就只存最后一个的值了,数组里存的值也是重复的数据,我再想这样要toUrl有何用
。
最终解决方案
使用selenium结合定时任务实现,这样一次抓几个页面,然后释放资源。
注意实现
- 循环变量:默认为item,与for(Object item : collections) 中的item意义相同,但是在没有地方配置次数或集合时为循环下标
- 循环下标:当循环时,会产生下标(从0开始)以该值存入变量中,与
for(int i =0; i < array.length;i++)
中的i
意义相同
- 循环下标:当循环时,会产生下标(从0开始)以该值存入变量中,与
- 定时任务,正常配置了cron,开了定时任务就应该定时执行才对, spiderflow在开了定时后还需要重新保存下cron才生效执行。
- 变量定义都需要使用${} 否则做字符串处理
总结
spiderflow是一个非常不错的开源,优点还是很多的,爬虫平台,只要搞过一定开发的,很容易上手。这里做的总结和注意事项,仅是记录和备忘希望下次遇到知道怎么处理。也分享给大家。给spiderflow点赞