簡介
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點贊