- GitHub文檔鏡像
- 歡迎使用Hawk
- 快速教程
- 主要組件介紹
- 核心功能:
- [模塊和算子]
- 常見(jiàn)問(wèn)題
- 更新日志作者和捐贈(zèng)列表
- 專題:
- 案例:
- 發(fā)布文章:
- 故事:
命令行增量和自動(dòng)化專題
Hawk雖然是圖形化軟件,但依然支持命令行和自動(dòng)化抓取吼鱼,本專題討論如何增量最住,和自動(dòng)化定時(shí)抓取婿崭,以及當(dāng)遇到錯(cuò)誤時(shí)(如網(wǎng)絡(luò)不通婆硬,導(dǎo)致一部分請(qǐng)求失敗)需要重試的場(chǎng)景苏遥。
1.命令行執(zhí)行
(本特性的測(cè)試還不完全饼拍,預(yù)計(jì)2018年11月發(fā)布)
由于大多數(shù)服務(wù)器都基于Linux實(shí)現(xiàn),因此跨平臺(tái)成為Hawk必備的功能田炭。但Hawk依賴的WPF(一種windows的圖形界面技術(shù))只能在windows上運(yùn)行师抄。 因此為了變通,可在Hawk上圖形化設(shè)計(jì)工作流教硫,并在其他平臺(tái)上解釋xml執(zhí)行叨吮。
- 一種是實(shí)現(xiàn)Python的執(zhí)行器(etlpy),但由于Python和C#的眾多區(qū)別瞬矩,會(huì)導(dǎo)致很多不兼容性茶鉴,該方案已放棄。
- 另一種方案景用,是通過(guò).NetCore實(shí)現(xiàn)跨平臺(tái)涵叮,我們采用了本方案。
定時(shí)抓取需依賴于Hawk的命令行實(shí)現(xiàn)HawkScheduler伞插, 它位于Hawk可執(zhí)行文件的同目錄中割粮。使用如下命令指定要執(zhí)行的工程文件路徑和任務(wù)名:
HawkScheduler -p project.xml -t task_name
使用HawkScheduler -h
來(lái)獲得相關(guān)幫助。
注意媚污,由于命令行本身的性質(zhì)舀瓢,以下特性將不可用:
- 寫入數(shù)據(jù)表: 將生成可執(zhí)行文件同目錄下,以數(shù)據(jù)表為名稱的txt文件
- TODO:增加其他不可支持的特性
2.增量抓取
增量抓取比較困難耗美,各網(wǎng)站皆有不同京髓,此處我們提供一些技巧。
一種類型是新聞型的幽歼,按照時(shí)間排列朵锣,并更新最新的新聞,最樸素的思路是記錄上一次抓取的最后位置甸私。然后在新的一輪抓取中诚些,不停地向前獲取,直到發(fā)現(xiàn)上一次抓取后中斷。
此處需要兩個(gè)核心技術(shù)點(diǎn):
2.1.保存上一次存儲(chǔ)的關(guān)鍵字
首先找到代表數(shù)據(jù)特征的列(如ID诬烹,標(biāo)題等)砸烦,能唯一標(biāo)識(shí)該數(shù)據(jù)。如果找不到唯一的列绞吁,可通過(guò)合并多列
來(lái)組合幢痘。
在這一列拖入更新到配置
, 輸入要更新的配置的名稱column,則在執(zhí)行時(shí)家破,該模塊每經(jīng)過(guò)一行數(shù)據(jù)颜说,就會(huì)自動(dòng)更新該列的值到全局配置(TODO:路徑)中。配合軟件的自動(dòng)保存機(jī)制汰聋,該值會(huì)隨時(shí)寫入配置文件中门粪。
2.2.下次執(zhí)行時(shí)定位到中斷點(diǎn)
在任務(wù)配置時(shí),添加正則過(guò)濾
烹困,正則項(xiàng)的值填寫為{column}
玄妈,代表從配置中讀取該值。
3.定時(shí)抓取
在實(shí)現(xiàn)命令行功能后髓梅,定時(shí)抓取也就變得非常簡(jiǎn)單了拟蜻。
在Linux平臺(tái)上,可使用crontab來(lái)執(zhí)行任務(wù)枯饿,具體可參考這里
在Windows上則可以使用任務(wù)計(jì)劃來(lái)執(zhí)行酝锅。可以參考這里
TODO: 增加更細(xì)致的寫法
4.回補(bǔ)數(shù)據(jù)方法
本功能簡(jiǎn)直是神器鸭你,Hawk能夠精確地記錄失敗的位置和上下文屈张,并在重試時(shí)將配置錯(cuò)誤和失敗部分補(bǔ)充回來(lái)。配置非常簡(jiǎn)單袱巨,但功能很強(qiáng)大阁谆。
開(kāi)啟該功能,需要在系統(tǒng)設(shè)置中勾選生成錯(cuò)誤集合, 則數(shù)據(jù)清洗在執(zhí)行時(shí)愉老,就會(huì)將錯(cuò)誤的信息保存到一張新表中场绿,除了當(dāng)時(shí)錯(cuò)誤時(shí)的參數(shù)輸入列之外,增加的列如下:
- __SysETL: 產(chǎn)生錯(cuò)誤時(shí)的任務(wù)名
- __SysTime: 錯(cuò)誤時(shí)間
- __SysERROR: 錯(cuò)誤原因
- __SysObjectID: 產(chǎn)生錯(cuò)誤的模塊唯一ID
出現(xiàn)錯(cuò)誤后嫉入,可使用如下流程創(chuàng)建補(bǔ)數(shù)據(jù)任務(wù):
- 根據(jù)錯(cuò)誤的信息焰盗,確定修改的策略,如增加延時(shí)咒林,改進(jìn)參數(shù)熬拒,修復(fù)bug等..
- 添加從數(shù)據(jù)表生成, 表名為剛才創(chuàng)建的錯(cuò)誤表表名。
- 可以按需拖入延時(shí)垫竞,或其他你希望的過(guò)濾澎粟,轉(zhuǎn)換等模塊
- 拖入重試補(bǔ)數(shù)據(jù), 勾選是否要執(zhí)行原來(lái)的執(zhí)行器蛀序。
- 如果想把回補(bǔ)的數(shù)據(jù)寫到另外一張表,則可拖入寫入數(shù)據(jù)表, 或?qū)懭霐?shù)據(jù)庫(kù). 或任何你想要處理的流程活烙。
在補(bǔ)數(shù)據(jù)時(shí)徐裸,盡量使用串行模式,以獲取更平穩(wěn)的表現(xiàn)啸盏≈睾兀可能在補(bǔ)充數(shù)據(jù)時(shí)會(huì)再次發(fā)生錯(cuò)誤,此時(shí)只要將寫入數(shù)據(jù)表的名稱改為新產(chǎn)生錯(cuò)誤的表名即可回懦。
其原理是定位到發(fā)生錯(cuò)誤的模塊气笙,并使用當(dāng)時(shí)的參數(shù)重新調(diào)用該模塊之后的任務(wù)。這就是流系統(tǒng)的強(qiáng)大之處粉怕。