成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計爬蟲Hawk背后的故事

大數據
Hawk有很多的bug,沒單元測試,功能不完善。但這都不是最根本的缺點,最根本是難于實現條件判斷和循環,你很難寫出if,switch和while。 這也是函數式語言的共同問題,你不得不逼迫自己用另外的思路去解決。雖然通過引入子任務,能“不夠優雅”地解決它,但依舊要花費不少腦筋。

五年之癢

2016年,能記入個人年終總結的事情沒幾件,其中一個便是開源了Hawk。我花不少時間優化和推廣它,得到的評價還算比較正面,因為負面評價也沒什么渠道進我耳朵。

不過你知道我寫這個東西花了多久嗎? 掐頭去尾,這是第五個年頭了。

讀研究生伊始,實驗室開始做數據挖掘,但我發現大家做研究,都是一段段的代碼,遇到新問題,就不得不再拷貝一份修改,很少想過復用。于是我便花了一年的時間,開發了一款現在看起來配色喪心病狂的“數據挖掘軟件”:

它居然能在上面刷微博,能把任何一個學姐學妹在微博的蛛絲馬跡全扒出來,渲染出配色更喪病的絢麗圖表。實驗室老師最喜歡拿這套軟件給參觀的領導演示了。

我多少有點偏執,想用純圖形化的方式構建數據挖掘的全部流程:從獲取清洗數據,建模,訓練到最后可視化。但以我當時的算法和軟件水平,這樣的東西根本就不可能做完善,我還意淫著能把它商業化。最終結果,是它跟著我一起畢業,除了我和幾個學弟之外,沒人用過。

工作后,靠業余時間維護它有很大的困難。數不清的bug和時間花銷,讓它成了拖后腿的包袱。一些考慮不周的接口,設計于幾年之前,后來想修改卻花費巨大。更重要的是,它的未來在哪里?

時值2015年,桌面軟件已死,web都已過時,移動端才是兵家必爭之地。這種大雜燴和復雜度,普通人不可能會用,程序員沒有文檔不愛用,大神不屑于用。

我也不想讓它扔在歷史的故紙堆里無人問津,索性就開源吧!

在開源之前,我做了一件事,將它改名為Hawk,寓意為馳騁天空的鷹;把我自己用的次數少于10次的組件全部刪掉,連3D可視化,統計和預測模塊也不幸免:只保留爬蟲和數據清洗,因為分析和挖掘已經有其他工具做得更好了,比如Python那無比強大的工具鏈。我認識到,只做一件事,并將其做好是多么重要。

老司機送它上路了,那一天,它正式出現在GitHub上(此處應當有掌聲^_^)

我對Hawk的評價

我就是用程序員的思路去設計Hawk的,好玩有趣是最重要的。

先說優點:起碼它能用,幾乎沒接觸過編程的人,也能在看過教程后,做出他自己的設計,熟練后效率會很高。

我最喜歡的是手氣不錯,升級Hawk2.0之后,絕大多數網頁都可以通過一鍵提取數據。其實原理很簡單,就是樹結構的模板匹配。

其次便是那個所見即所得的數據清洗,在調試模式下快速設計任務,在執行模式下并行執行。恕我孤陋寡聞,這種基于流式管線思路,在其他軟件上用的并不多。

最后便是子任務,再復雜的需求,都可以通過子任務分而治之,比如多次定向跳轉。這東西讓八爪魚和火車頭去試試看?

Hawk最大的價值,是將復雜的邏輯鏈條化和可視化了,你可以將代碼變得不那么耦合,像搭積木一樣方便地組合。當然這些都拜于函數式編程的思想所賜。

再說缺點:Hawk有很多的bug,沒單元測試,功能不完善。但這都不是最根本的缺點,最根本是難于實現條件判斷和循環,你很難寫出if,switch和while。 這也是函數式語言的共同問題,你不得不逼迫自己用另外的思路去解決。雖然通過引入子任務,能“不夠優雅”地解決它,但依舊要花費不少腦筋。

有的人覺得Hawk不夠強,這是因為它是圖形化軟件。為什么具備UI的軟件很難和命令行相比?因為設計UI的新功能時,不僅需要考慮它的算法,更要考慮它如何在UI上呈現。有些功能非常有用,比如爬蟲常見的BFS和DFS(深度和廣度優先遍歷),但在UI上配置會異常繁瑣,我不得不將它們拋棄掉,只保留最常用的功能。

為什么呢?輕松寫BFS的人,會想用Hawk嗎?應該不會,他們也許會直接敲代碼。

Python版本的Hawk: etlpy

因為圖形界面和C#本身的諸多不足,我開始發展了Python的Hawk,稱為etlpy (Extract-Transform-Load in Python)

最初的想法,是將Hawk生成的配置文件(xml)交給etlpy去執行,初看很酷,但這種思路被證明不靠譜,兩種語言,使用不同類庫,對同一個任務流,就因為在底層的細微偏差,會導致結果的完全不同。我花了大量的時間在解決兼容性問題上,發現難度不小,兩者互相制約牽絆。

最終,我放棄了所謂的兼容性,之后etlpy功能日新月異,甩了Hawk有10條街不止。Hawk的5分鐘拖拽,在etlpy上只要一句話:

  1. url=’www.cnblogs.com/p{0}’  
  2. t=task().let(‘p’).range(‘1:20’).format(url).detect()\.let(‘dignum’).split(‘_’)[0].num().write(‘cnblogs.json’) 

介紹etlpy的語法超過了本文的范疇,但它擁有Hawk的一切優點,同時能夠分布式并行抓取,任務隊列,超級代理,定時更新,與任意函數庫集成。執行引擎(etlpy)的全部源代碼,也就1000行出頭。

也許你都沒有聽過Lisp這門語言,不過沒有關系:Hawk是用C#寫的,手敲的代碼大概有1萬行,用Python大概是1000行左右,用Lisp只要300行就能實現它的全部功能!當然,沒有圖形界面。由此可見編程語言在表現力上的巨大差別。Hawk本質上是個可視化的Lisp設計器。

我喜歡語言的純粹和精妙,用簡潔的語法就能代表復雜的邏輯。Hawk其實定義了一種爬蟲語言,對諸多常用操作進行了模塊抽象,在拖拖拽拽中,你構建了一張圖(Graph),數據在圖上流動,被生成,清洗和消費。最近大熱的Tensorflow不也是一樣的思路嗎? 這張圖,既是數據,也是代碼。

當然,不論是Hawk和etlpy,你都不能把它們當成廚子,給它指令,就能做出一道菜來。而應當成一套順手的廚具,而真正做菜的那個人還是你。自動化只是解決了部分問題,而巧妙設計的源泉還是來自于操作者本人。最強大的工具,是自己。

我們用語言表達概念,模式和流程,在此之上構建抽象。我假定每個用Hawk的人都能觸類旁通,因此通過一些通用的介紹,他應該就能理解絕大多數的功能。那如果還是不懂呢?那不好意思,請用八爪魚,否則Hawk的很多設計,對他來說就變得沒有意義。我自己從來不愿意把Hawk和etlpy定義為爬蟲,它們提供的是一組環境,語言和工具,爬蟲只是它的一個不錯的應用場景而已。

為什么要開源?

有人肯定會問,為什么不把Hawk商業化,去賺一筆錢呢?

理想狀態下,成立公司去完善推廣和銷售軟件,那么應該行得通,否則單槍匹馬是不可能的。那我是不是值得為這套軟件成立公司呢?應該不會,因為它只是個工具,還不值得我去開一家公司去完善它。

我相信,這也是很多程序員面臨的類似困境,想靠賣軟件盈利,就像路上的煎餅攤一樣簡單樸素,問題是放在10年前還有可能(記不記得30元一套的金山詞霸?)而服務化盛行的今天,可能很低。到處推廣,最終只可能淪為某天我在咖啡廳里的幾句談資,不可能有什么大氣候。

有朋友說,為什么你要開源,對自己來說是不是有點像代碼外泄?谷歌的TensorFlow都開源了。前面的路還有很遠,大家都要忙著趕路呢。保護代碼最好的方式就是開源,沒開源時有人還想著破解研究,開源了大家fork一下然后就沒有然后了,“得不到的才是最好的”。

不得不說,開源才是最貴的。大家看到開源,歡欣雀躍,以為在路上撿到了錢,其實不是的,如果你真想用起來,一定會花更多的時間來學習它,因為開源者沒有義務像商業軟件那樣,提供完整的支持。時間和錢總是矛盾的,既想省錢還想省時間,天下沒有這樣的好事。

我以前天真地以為,開源的全部就是把源代碼公開在網上。之后難道不是理所應當的聲望,一幫牛人幫你優化功能修復bug嗎?

哈哈,開源怎么可能那么簡單。

如果軟件寫得不錯,但沒有宣傳,那掛在網上完全無人問津,沒人知道那是什么鬼;寫得足夠好,宣傳也到位,那也很難有人幫忙貢獻開發: 往上看,大神們都忙著造輪子;往下看一大幫實用主義者,抄起輪子就上路,誰顧得上看輪子是不是圓的呢?

開源不意味著坐視不管,依舊需要大量的精力去培養完善它和它的社區環境,通過郵件和論壇方式提供一定的服務。這件事情如果不用心,則一事無成。

如果pandas和ipython不開源,我現在也可能無法進入數據分析的殿堂,沒有Linux和眾多開源工具,世界也不會發展成這個樣子。我明白了為什么開源是一種哲學,它是一種“共贏”。對程序員來說,名譽和成長比賣軟件帶來的價值更大,那是認可感和成就感。對其他人來說,開源帶來了時間的節省和實際的財富。這樣做必然是有價值的。

請理性使用爬蟲

開發完Hawk的那段時間,我也和很多人一樣,看到一個網站就想去試試。以我的熟練程度,20分鐘數據就都被下載下來了。然而數據保存在硬盤上,幾乎不產生價值。

Google的工程師,可以下載它的全部源代碼。可是為什么沒有另外一家Google,甚至另外一家百度(又黑了百度)出現呢? 因為更重要的是人才,資源和商業模式,代碼在這件事情中最不重要了。拿到源代碼都沒用,更遑論掛在網上供大眾閱讀的數據呢?

爬蟲是灰色區域,所以大公司從來不公布任何爬蟲框架,但內部用的比誰都多。兩年以來,網絡發生了巨大的變化,ajax化,SEO變成了關鍵詞廣告位,大量的網站開始強硬地反爬蟲,之前能隨便抓取的網站,現在都變得很困難。我相信這里有相當一部分是Hawk的功勞。讓人郁悶的是,不少人抓數據僅僅用來玩。

可以想象,一小部分標榜大數據和AI的公司,把Hawk的代碼弄下來改改,添一點數據報表功能,就可以盜走別人網站數據,自立門戶,去到處忽悠。雖然Hawk開源協議是GPL(使用開源代碼的必須開源),但這完全限制不了,畢竟是中國嘛。可能他們不知道,數據,工具和算法根本不值錢,理解,洞見和執行才是最重要的,可是這部分卻需要真刀真槍的本事。

你肯定會問,那為什么etlpy后來不更新了?

第一它不穩定,現在釋放出來可能砸招牌。其次,如果釋放出etlpy,能量和Hawk完全不是一個數量級,用它五分鐘寫出來三行代碼,就能迅速地部署在我司全國各地的千兆公網節點,上萬QPS的壓力瞬間就能壓掛一個中小型網站。它的出現可能會讓網站變本加厲地防爬蟲。

總之,稍微理性一些,適可而止吧。

為什么不繼續優化?

很簡單,因為沒有時間。爬蟲本身沒太多技術含量,再深入就進入了異構Web數據集成的領域,大部分人根本用不到。這是個擁有數不清trick和dirty技巧的領域,是與網站設計者的攻防戰爭,玩到最后,你的能力曲線就像log函數一樣,被壓制在一個確定的上界。

現在是人工智能和深度學習的天下,以我所在的團隊為例,身邊的大神們都在努力地優化Tensorflow,改造算法的底層來提升效率,在有趣的數據集上做大規模并行訓練。

幾年之前,如果我沒有去做爬蟲和Hawk,沒有去設計正則解析器tnpy,而是緊跟潮流去做大規模機器學習的話,眼界和身價可能就完全不一樣了呢?

當然,我不后悔去做Hawk,它是實實在在的能讓大眾用起來東西。或許在萬里之外,有個一樣戴著眼鏡充滿激情的和我一樣的nerd,看到我的代碼開心地拍了桌子,大喊“f**king nice work!”到那個時候,其他事情還重要么?

如果說我后悔沒做什么,是我沒有把軟件做成英文,曾經有一段時間我個人非常崇尚中文編程,從而釀成了現在軟件國際化異常困難的后果;再者,沒有直接開發Python或者js這種能跨平臺語言的版本,Hawk只能局限于Windows桌面應用,而不同的社群就風氣又不一樣了。

它的設計有不少問題,不過更多來自于多種因素的妥協。它注定是不完美的。因為職業生涯的關系,我無法像前幾年那樣,花大把的時間去優化它。既然開源了,我希望有人能把它做得更好。

其實我還是個程序員

我之前從來沒想過自己會成為一名程序員。

高中時候理科不錯,語文巨差。高考完,老媽扯著嗓子問我,報哪所學校什么專業吧? 正在打游戲的我根本無暇顧及,不耐煩地說,隨便你們吧! 糊里糊涂地進了通信工程,幾年后通信稍顯疲軟,就自學計算機,然后一點都不偶然地成了一名程序員。

網上黑程序員的段子太多了。我都一笑而過。但最近幾年我堅決不買任何尺寸和顏色的格子衫。如果看到我穿,好吧,那一定是我本科時候買的。

你知道那幫每天不茍言笑,整天盯著顯示屏的怪人每天在想什么嗎?

敲完這些文字的時候,2017年的九點半我還在杭州的酒店里睡眼惺忪,誰讓昨天夜里11點才回來的呢?讓我開心的,是Hawk的star接近800,有點擔憂的,是公司的新產品馬上要上線,會不會出什么狀況呢?

責任編輯:武曉燕 來源: 36大數據
相關推薦

2013-07-23 09:02:48

Facebook Ho應用設計

2012-10-17 13:50:25

2012-07-26 12:00:50

筆記本

2018-11-06 15:56:25

西門子工業網絡智能制造

2011-09-26 14:28:28

水果忍者

2011-11-02 17:18:56

AndroidQQ瀏覽器

2016-12-12 14:19:59

LLVMClangApple

2014-04-14 10:06:22

.Net 開源

2017-11-27 11:02:46

高并發突發池系統架構王者榮耀

2021-09-05 18:26:42

2015-06-18 11:28:18

谷歌

2012-06-19 16:11:56

2013-02-20 10:05:21

吳剛捕魚達人

2022-10-21 11:50:04

2017-10-30 08:20:16

王者榮耀騰訊云游戲

2023-09-26 07:33:41

2016-12-12 14:24:25

蘋果Aqua界面

2010-08-09 09:53:14

RailsRake

2011-12-14 11:14:29

IT外包變化岳雷

2015-07-14 15:44:18

渠道華為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干成人网 | 一区二区三区在线播放 | 激情五月婷婷丁香 | 欧美一级小视频 | 91久色 | 国产一级视频免费播放 | 黄色国产区| 秋霞影院一区二区 | 国产一区二区中文字幕 | 一区二区三区中文字幕 | h视频网站在线观看 | 日本免费一区二区三区 | 欧美群妇大交群中文字幕 | 国产一区在线免费 | 91精品国产综合久久精品 | 午夜视频免费网站 | 亚洲精品乱码久久久久久久久 | 久久中文字幕一区 | 99精品视频在线 | 成人精品一区二区户外勾搭野战 | 一区免费 | 国产激情91久久精品导航 | 日韩精品在线播放 | 日韩中文视频 | 国产精品污www一区二区三区 | 亚洲444eee在线观看 | 日韩中文字幕在线视频观看 | 久久精品视频播放 | 国产精品久久久久久久久久尿 | 狠狠婷婷综合久久久久久妖精 | 久久综合一区 | 精品欧美一区二区三区 | 一区二区精品视频 | 精品久久久久久久久久久久久久 | 国产农村妇女精品一区 | 久久久高清 | 成人午夜免费在线视频 | 91免费看片 | 精品一区二区三区在线观看国产 | 欧美中文字幕一区二区三区亚洲 | www.youjizz.com日韩|