大概在半年前,我觉得需要做一个网站,寻找新奇有趣的餐厅。
喜欢美食的人,在中意餐厅吃久了,总想找新餐厅换换口味,试试新菜和新的食材。
寻找新餐厅并不容易,甚至是艰难。由于众所周知的原因,网上流传的餐厅文,美食文,常常不可信,编排越精美,越可能是软广---大家天天都很忙,很少有闲心做这么精美的文宣。我跟这些美食文找过,失望大于希望,成功率不到一半。而且,魔都太大,打听到的餐厅,总要去试吃一下,来来回回总跑上几个小时吧?时间很宝贵,这么做太不划算了!
上海的餐厅大众点评网收集的最齐全,如果我把它上面所有的上海餐厅都抓取下来,统计和分析每家的评论,找到品质靠谱的餐厅就容易得多。
每家餐厅,只统计最近一个月的评论。因为按照总评论数对餐厅进行排序是不合理,有些餐厅开业十多年,累计起来的总评论数很高,但不能反应近期的品质。新开业的餐厅总评论数不高,即使体验再好,排名也不会高。如果只统计最近一个月的评论进行排序,会更准确。
餐厅排序之后,把排名最前的3000家餐厅在地图上标记出来,拖动地图会刷新标记,显示当前地图范围内的餐厅。那么,当我要寻找餐厅的时候,只要拖拖地图,就能找到靠谱餐厅。还可以根据餐厅的分布,去餐厅密度高的地方吃饭,那就更不会错了。
经过两个多月的开发,这个网站的Demo发布了,是最佳餐厅.com,网址在http://www.zuijiacanting.com。
这个网站,现在发布上海的Top 3000餐厅。每个月的月初,会自动抓取大众点评网上的所有上海餐厅,统计和分析后,更新排名和标记。
这个项目做下来,涉及到的东西还是蛮多的。主要的开发语言是python。大众点评网的抓取,用的是Python Scrapy爬虫框架。数据库是MySQL 5.5。数据库ORM是SQLAlchemy。Web后端是Tonado框架,前端是Bootstrap, css, html, javascript, JQuery。在线地图用的是百度地图。代码版本管理是Git,操作系统是Ubuntu 12.04,网站具有自动部署和自动监控功能。域名在CheapName申请的。架设网站的主机是在Linode的,选的是东京机房,有点小贵,但好在国内访问速度够快,而且不需要备案。期间请了一个朋友帮我改进导航栏美工效果,美工这个东东我不擅长。
我准备维护它一年时间,如果使用的人多的话,我会考虑拉一些投资,将网站做大。如果做大的话,会请设计师和美工重新设计页面,美化页面。增加搜索地址餐厅的功能。抓取更多的城市,包括国外的城市。抓取更多社交网络的数据,诸如新浪微博,Yelp,人人,街旁,以及微信,作成与Klout类似的餐厅打分排名系统。让网站支持诸多更多的第三方登录,如豆瓣,微博,微信,QQ。开发IOS和Android版本,发布移动版。
我准备做一个系列把这个开发过程写出来。有兴趣的同学可以把它作为一个入门级的参考资料。
如果从头做一个类似的网站,用python开发应该是最快的。但并不是说这就够了,想把它做到非常成功,每个环节都有大量的优化和改进问题。比如说,如何让web服务器支持高并发。比如抓取用Nutch做,并做全文检索。比如设计,美工,和前端,资深的设计师美工和前端工程师紧缺到爆!比如用NoSQL数据库代替MySQL,加速查询检索和抓取。比如网站的安全和运维,也是问题多多。每个小领域都需要时间和经验的积累,技术进步无止境。