前两天突发奇想搞了一个爬虫框架,主要思想借鉴了alfred workflow和ios开发里的storyboard。
每一个爬虫只需要一个配置文件,demo在config.yaml里:从点评的搜索结果页开始爬起,抓取每一家商户的信息
components:
initializer:
type: initializer
segues:
- to: shopList
func:
|
offer("http://www.dianping.com/search/category/1/0");
shopList:
type: pageProcessor
segues:
- to: shopList
func:
|
var nextPage=$(".NextPage");
if(!nextPage){
return;
}
offer("http://www.dianping.com"+nextPage.attr("href"));
- to: shop
func:
|
$(".BL").each(function() {
offer("http://www.dianping.com"+($(this).attr("href")));
})
shop:
type: pageProcessor
segues:
- to: mongodb
func:
|
offer({
shopName:$(".shop-title").text()
});
mongodb:
type: mongodbAdaptor
host: 127.0.0.1
port: 27017
collection: shop
解释一下这个配置文件: component是一个个功能单元,有处理页面的,有把数据持久化到db的 segue是连接各个component的(to:发送到哪个component,func:把什么数据发过去,通过offer函数) 比如shopList的两个segue,第一个segue是把下一页的链接也发给自己处理,第二个是把商户页的链接交给shop这个component处理~
附上项目地址 https://github.com/yucong/spiderman
目前主要的核心逻辑已经都实现了,就差把配置文件弄成像storyboard那样的可视化编辑了~