星巴克指数研究(爬虫技术爬坑篇)

Posted 小胖爱投资

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了星巴克指数研究(爬虫技术爬坑篇)相关的知识,希望对你有一定的参考价值。

大家好!很久没有更新推文了!很对不起大家!

今天给大家带来我这几天做的一点小工作。



0.背景介绍

最近想买房,一直在看房。贝壳、链家、我爱我家、上海中原网这几家倒腾来倒腾去,只要是休息的时候,一定要瞄上两眼,不然就觉得浑身难受。从三林--世纪大道--徐汇滨江--前滩--后滩--北蔡--东外滩,再从一梯队小学--二梯队小学,基本上都看了个遍,不说把房源记得滚瓜烂熟吧,但基本热门小区我都能说上一二。(都能去面试中介了)

闲着没事的时候,就喜欢看看规划,看看发展潜力或者是看看楼市预测。有一天,突然看到了一篇文章,提到了如下观点:

星巴克指数研究(爬虫技术爬坑篇)


非常有意思,受到这个观点的启发,正好看房看得也看无可看了,正好来研究研究。

先研究第一条:

如果有星巴克入住的地段,那一定不会是差的地段。

对我的这个研究,暂时命为“星巴克指数”。




1.数据来源

对于房源来说,现在最完整的就是链家网了。链家网从数据准确度、更新频率、数据量来说,链家现在肯定是中国房产信息的龙头。

这篇文章将主要使用上海链家的数据进行分析。

我们将针对上海的所有在链家上有数据的小区进行分析。如果想看到所有的小区列表,我们可以直接访问:https://sh.lianjia.com/xiaoqu

星巴克指数研究(爬虫技术爬坑篇)

我们在随便选择一个小区

下拉可以看到基于百度地图制作的一个poi详情显示。点击“生活”-“咖啡馆”,我们即可看到小区周边的咖啡馆情况。 如下所示,在地图上并没有看到星巴克。对于这个小区来说,星巴克指数的评分可能是非常低的了。

星巴克指数研究(爬虫技术爬坑篇)



2.数据获取

我如果想要获取到全部小区附近的咖啡馆该怎么办呢?最最原始的方法当然是就这样一个个小区打开,然后再下拉,记录下小区周边的咖啡馆情况,获取数据。但是,链家网上海的小区,少说也要有大几千个呢(事实证明我错了,单单浦东新区就有5000+个小区),一个个点,什么时候到头呢?不仅要一个个点,我们还要记录哪些没点过,哪些点过呢。

不行,作为一个程序员,我们一定要有效率!

该怎么办呢?


2-1爬虫

非常简单,写个程序,让程序替我们获取数据!

星巴克指数研究(爬虫技术爬坑篇)

可以注意到,链家上的小区是分区域的。我们可以模拟点击,或者直接获取对应的链接访问区域下的小区:

星巴克指数研究(爬虫技术爬坑篇)

可以注意到的是,当你把鼠标悬停在浦东上时,浏览器的左下角出现了一个链接,那正是浦东区域的小区对应的链接,我们可以点进去,进入浦东的小区页面。同样的,在小区列表中,将鼠标悬停至小区名称的时候,我们可以看到左下角显示了小区详情的链接。如下图所示:

星巴克指数研究(爬虫技术爬坑篇)

通过:小区主页面->各区域小区页面->小区详情页面。这样的路径,我们就做到了上海各区域各小区的信息收集了。


当然文章中并没有涉及在程序中如何获取的细节,因为太过专业不放在本篇文章中说明。


2-2poi收集

整理完毕全部小区列表信息后,我们要开始着手完成poi信息的收集了。

按照我最开始的思路,我需要进行如下操作:

  1. 模拟浏览器打开小区详情页面

  2. 拟下拉至poi列表 

  3. 模拟点击生活标签

  4. 模拟点击咖啡馆标签

  5. 爬取数据

  6. 打开下一个小区详情页面

不行,作为一个(lazy)程序员的我,看到这样的操作步骤,头都要炸了。不行,我要更简单的方法!我要偷懒!有着多年(伪)爬虫经验的我的直觉告诉我:“F12F12Chrome浏览器打开调试窗口的快捷键。)调试窗口于爬虫程序员,相当于鱼于水,空气于人。咳咳咳,扯远了。


打开调试窗口,切换至NetWork标签(在我有限的经验里,这个工具最好使):

星巴克指数研究(爬虫技术爬坑篇)

Network标签里面的XHR分类呢,又是我最喜欢的伙伴。里面一般是RESTful的接口访问,对于爬虫来说,是最方便的了。

但是。。。这个页面并没有RESTful接口的请求!!

那,我们就直接切换到ALL这个标签下面吧:

星巴克指数研究(爬虫技术爬坑篇)

茫茫一片的请求啊,要找到合适于我的接口,无异于大海捞针(也有可能根本找不到能用的)


我就对着这些请求,发呆。

星巴克指数研究(爬虫技术爬坑篇)

大约过了5分钟之后,灵感上线了:链家使用的是百度地图,那么对我有帮助的极有可能与baidu相关啊!

于是在这些请求中,寻找与baidu相关度较高的请求,功夫不负有心人:

星巴克指数研究(爬虫技术爬坑篇)

还真被我给找到了!

但是呢,看到原始的请求链接,我的头一下子又大了:

星巴克指数研究(爬虫技术爬坑篇)

https://api.map.baidu.com/?qt=bd&c=289&wd=%E5%92%96%E5%95%A1%E9%A6%86&ar=

(13527541.65%2C3636664.19%3B13531541.63%2C3640664.23)&rn=10&l=18&ie=utf- 8&oue=1&fromproduct=jsapi&res=api&callback=BMap.rd.cbk25859&ak=C106a48023d9606dcdad761cbc070095


这是个什么妖怪url。。。

星巴克指数研究(爬虫技术爬坑篇)



多年的经验告诉我:



星巴克指数研究(爬虫技术爬坑篇)


3.与百度api的斗争

第二天,我准时来赴约。这一次,我知道,这是我与百度api的一场没有硝烟的战争。

我们来仔细研究一下,上面那个url的具体参数:

星巴克指数研究(爬虫技术爬坑篇)

qt=bd 意义不明

c=289 意义不明

wd=咖啡馆意义明确

ar=(13527541.65,3636664.19;13531541.63,3640664.23)意义不明,猜测为坐标,但为什么是两个坐标?

rn=10 意义不明

l=18 意义不明

ie=utf-8 编码格式,utf-8最通用

oue=1 意义不明

fromprduct=jsapi 看来是百度地图的jsapi的接口

res=api 声明这是个接口(废话我知道)

callback=BMap.rd.cbk25859 回调函数,目测经过了混淆

ak=C106a48023d9606dcdad761cbc070095 百度开发者apiKey

最让我绝望的一点是:这个接口跟小区名称毫无关系。

星巴克指数研究(爬虫技术爬坑篇)



柳暗花明

正在我陷入绝望之际,一个偶然的发现,点燃了我新的希望:

星巴克指数研究(爬虫技术爬坑篇)

在无聊地打开所有标签的时候,貌似发现了什么不得了的东西。

但是这个坐标是121.546618, 31.217388跟上面那个意思坐标毫无关系啊。

我又去翻看了百度地图api的官方文档,看看那上面有没有对坐标的说明吧:

星巴克指数研究(爬虫技术爬坑篇)

划重点:

  1. 全球通用的坐标,WGS84坐标

  2. 国测局坐标,GCJ02坐标,是在WGS84上做了一定的转换。

  3. bd09坐标,百度坐标,在GCJ02上做了一定的转换。

  4. bd09mc坐标,百度米制经纬度坐标。将bd09坐标使用米来表示的坐标,地图展示的时候需要最终转换为米制坐标。

怀着试一试的心态,我将上述小区坐标,转换为米制坐标,如下图所示:

星巴克指数研究(爬虫技术爬坑篇)

咦,等一等,怎么这么似曾相识?

{"status":0,"result":[{"x":13529541.639213872,"y":3638664.2411838865}]}
ar=(13527541.65,3636664.19;13531541.63,3640664.23)

还不够明显?那这样呢:

13529541.64,3638664.24;13529541.64,3638664.24

13527541.65,3636664.19;13531541.63,3640664.23

聪明的你一定发现了:小区中心的米制坐标各减去2000,是ar的第一个坐标;小区中心的米制坐标各加上2000,是ar的第二个坐标。也就是这个接口表示了,搜索距离这个小区2000m范围内的咖啡馆。核心的参数是:

wd,表示了关键词

ar,表示了范围

rn,表示了请求数量(经测试得,不在此赘述)

当然,你要去百度申请一个apiKey,否则无法使用。申请 apiKey的教程请百度,不在此赘述。

那,我接下来要做的是:小区主页面->各区域小区页面->小区详情页面->获取小区经纬度->获取转换后小区坐标(百度米制坐标)->根据接口规则获取需要的poi数据->根据poi数据获取跟小区的距离->根据距离及是否有无星巴克数据计算星巴克指数。


4.总结

实在是太不容易了!本来以为两天就能完成的数据整理+计算+文章便编写,结果在第四天的时候才刚刚把基础数据准备好。还是太轻敌了。不过,从这次的数据准备过程中,也确实学到了很多东西。学到最重要的就是,F12很重要!有些背景知识很重要(不然也很难猜测那一串数字是米制坐标),还有最重要的一件事:遇到困难就去睡觉(很皮星巴克指数研究(爬虫技术爬坑篇)


接下来,我将会根据获取到的数据,完成星巴克指数的计算,过两天见!



当然,如果大家很想学习爬虫技术细节,我也很乐意分享啦。看看这篇文章的反馈再说


原文链接是那篇勾引我入坑的文章。


爬坑,码字不易,望大家不吝关注、点赞、转发,谢谢。





以上是关于星巴克指数研究(爬虫技术爬坑篇)的主要内容,如果未能解决你的问题,请参考以下文章

Python 爬虫爬坑路(二)——B站图片,咸鱼的正确 GET 姿势

服务端预渲染之Nuxt - (爬坑篇)

网络爬虫技术防范洗钱风险 | 汇付天下反洗钱系列

星巴克招人!要技术大拿。

星巴克点餐流程

星巴克其实是一家数据科技公司!?