一直想在webmagic中加入一門自定義語言(領域特定語言,簡稱DSL),可是實在無力從語法解析層開始寫起。嘗試過在XPath上作文章,後來又以爲太難過了。今天又聊到這個話題,想到當年接觸過的Ruby,找到了這個Ruby的簡易爬蟲項目: https://github.com/mion/harvestmancss
JVM上一個好處就是有不少奇怪的庫,並且這些庫還很是的成熟,好比JRuby,Jython以及rhino。因而鼓搗半天,整出了一個DSL的雛形(基於JRuby): <!-- lang: ruby --> title = css "div.BlogTitle h1" content = css "div.BlogContent" urls "http://my\.oschina\.net/flashsword/blog/\d+"git
感受仍是很是強大的!最強大之處是你大概不知道它是Ruby,好像你也不怎麼須要會Ruby的語法...程序員
惋惜JRuby雖酷,可是遇到複雜狀況定製起來可能會有點難度,畢竟會Ruby的人不那麼多。這時我又想到了廣大程序員喜聞樂見的Javascript!因而有了Javascript版本DSL(基於rhino):github
<!-- lang: js --> var result = { title: $("div.BlogTitle h1"), content: $("div.BlogContent") } var config = { ua: '', sleepTime : 20 } urls("http://my\\.oschina\\.net/flashsword/blog/\\d+")
說真的它已經不算是DSL了,由於有明顯的js痕跡!不過不要緊,畢竟熟悉js的人更多嘛,這樣子高級定製會方便一些。web