上一篇网页爬虫分析博客意外在知乎获得了过千的点赞《有哪些网站用爬虫爬取能得到很有价值的数据?》(小编注:有兴趣可以上知乎查看),坚定了我继续玩爬虫的决心。
这次爬点啥好?作为一个伪吃货(很想吃但有很多忌口,同时又吃不胖),怀着为福州吃货服务的理想,我决定:这次我来爬爬餐厅。
源代码
Talk is cheap, show me the code. 依照惯例,先贴代码。https://github.com/SmileXie/dianping_crawler编码中用到了几个Python库:Requests, Beautifulsoup, MySQL Python connector. 数据库用到了MySQL。
数据样本
数据样本来源于大家熟知的“大众点评”,收集了其中7740家福州餐厅的数据。其中,包含以下特征之一的数据,我认为是无效的数据,予以剔除:
-
点评星级为0
-
人均消费大于3000
统计分析
每个统计结果之前,我都会把对应的SQL查询语句附上,供较真儿的程序员们分析。
福州最贵餐厅TOP20
把所有餐厅按人均消费排序:
mysql> select id, name, branch_name, price, category, district from ResTable order by price desc limit 20;
“福州最贵餐厅”称号被“和怀石料理”收入囊中,人均消费505元让我等屌丝望而确步。人均消费400+的餐厅有八家。
TOP20中,日本料理分类占得最多。左海/西湖公园、五四路商业区、五一广场是TOP20高端消费餐厅较为聚集的商圈。
比较尴尬的一点是。大众点评的app中已经有了比较完善的排序功能。在app中已经可以方便地按价格排序得到以上的结果。那感觉……
下面我只好剑走偏锋,给大家总结一点点评app上筛选不出的数据。
福州餐厅价格分布
假设对福州的餐厅消费按以下规则来分类
考虑到屌丝消费的餐厅,大多数都没有在大众点评记录,或因没有星级而被当成无效记录,统计可能失准。因此下面不对小于30元/人 消费水平的餐厅作统计。
mysql> select count(*) from ResTable where price >= 200;mysql> select count(*) from ResTable where price < 200 and price >= 100;mysql> select count(*) from ResTable where price < 100 and price >= 30;
从数量上看,中低消费的餐厅还是占据大部分。
福州的吃货商圈
统计数据库中各商圈的餐厅数量,如下:
mysql> select district, count(*) from ResTable group by district order by count(*) desc limit 30;
以上商圈中,我们剔除掉行政区域的数据(如闽侯县,马尾区,其他地区),因为这些区域下的餐厅,通常不属于任何商圈,于是就被划分到以行政区域命名的区域中。剔除掉以上数据后,福州各大商圈的餐厅数据排序为:
宝龙万象果然是最大的吃货聚集地,老牌商圈东街口排名老二,近几年新兴的商圈仓山万达和博仕后分列三、四位。
值得注意的是,吃货商圈top10中,有两个是位于闽侯县。也说明闽侯大学城区块正在逐渐融入市区,有很大的发展潜力。
福州的高富帅商圈
上面统计了各大商圈的餐厅的“量”,以下来统计一下“价”。看看了解一下福州各大商圈中,哪个才是“高富帅”商圈。
mysql> select district, avg(price) from ResTable where district = 'xxxx' and price > 0;
综合统计上述各大商圈的餐厅的人均消费,如下:
福州各大商圈的人均消费
五四路商务区是高端白领聚焦地,一举夺下福州最“高富帅”商圈称号。而位于闽侯上街区块的博仕后与新西客站,虽然在餐厅的“量”上挤入了福州top10商圈,但仍难以摆脱低端印象,在人均消费均价上排名垫底。“学生街”所在的福建师大商圈,聚焦了大量的小吃,人均消费也不会太高。
分店最多的连锁餐厅
mysql> select name, count(*) from ResTable where price > 20 group by name order by count(*) desc limit 30;
分店最多的餐厅,统计的时候,加上了人均消费价格大于20的限制。因为低消费的餐厅,在大众点评上没有完整的登记,统计出来的分店数量也有较大的偏差。
根据上面的统计结果,排名第一的是卖Pizza的玛格利塔。M记与K记在福州竞争了这么多年,从餐厅数量上来看,还是M记占了上风。
“三九”餐厅
所谓三九餐厅,是指口味、服务、环境评分都在9.0(包含9.0)之上的餐厅。
mysql> select name, branch_name, taste, service, surroundings, price, star from ResTable -> where taste >= 9.0 and service >= 9.0 and surroundings >= 9.0 order by price;
上面是“三九”餐厅,价格按从低到高排序的结果。有五家店的人均消费小于100,便宜未必没好货。
文/小耸(简书作者)原文链接:http://www.jianshu.com/p/7af8bf250b3a
著作权归作者所有,转载请联系作者获得授权。
学技术,从www.w3cschool.cn开始。