在webmagic中加入了自定义语言

一直想在webmagic中加入一门自定义语言(领域特定语言,简称DSL),但是实在无力从语法解析层开始写起。尝试过在XPath上做文章,后来又觉得太难过了。今天又聊到这个话题,想到当年接触过的Ruby,找到了这个Ruby的简易爬虫项目:
https://github.com/mion/harvestman

JVM上一个好处就是有很多奇怪的库,而且这些库还非常的成熟,比如JRuby,Jython以及rhino。于是鼓捣半天,整出了一个DSL的雏形(基于JRuby):


title = css "div.BlogTitle h1"
content = css "div.BlogContent"
urls "http://my\\.oschina\\.net/flashsword/blog/\\d+"

感觉还是非常强大的!最强大之处是你大概不知道它是Ruby,好像你也不怎么需要会Ruby的语法…

可惜JRuby虽酷,但是遇到复杂情况定制起来可能会有点难度,毕竟会Ruby的人不那么多。这时我又想到了广大程序员喜闻乐见的Javascript!于是有了Javascript版本DSL(基于rhino):

<!-- 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的人更多嘛,这样子高级定制会方便一些。

你可能感兴趣的:(jruby,webmagic)