

前言
作为一枚热爱美食的美食寻觅者,小编爬取了所在城市某团上的美食商家的信息,准备去把评分较高的挨着品尝一遍,圆一次美食之旅的小小梦想~
我们爬取了每种种类美食商家名,id,地址,人均价格,评分,通过 id 构造商家链接
源码获取
关注公众号“木下学Python”,回复关键字“美团美食”获取源代码。
数据源分析
我们打开美食栏的第一页:

然后我们按 f12 打开开发者工具并翻几页,找到了数据源:

我们在每次翻页发现都有一个 _token 参数一直在变,并且请求一定带上它,由此我们可以判定是要通过 js 逆向才能获得数据:

小编做到这里后就试着去逆向了,然后路途坎坷,找到了生成 _token 的入口:

到了这里后,就跟着加密函数进去扣代码了,结果越扣越多,虽然找着了加密函数,但扣下来的看,里面又嵌套了许多函数,很复杂,于是小编放弃了,去观察网页源码,发现,我们可以绕开 js 逆向获得数据,我们需要的数据就在网页源代码里:

到这里,我们就可以从源码里提取数据,绕开 js 逆向,数据在源码里,正则很好匹配,但也遇见了其他的反爬,导致数据不完整,下面小编就来说说遇见的反爬
登录 cookie
小编就直接用正则提取到后,第一个遇见的是每种种类的美食,只能爬到 1-2 页,就被验证码反爬了,就继续爬取其他种类的美食了,其他种类的也是同样的结果,有些甚至直接第一页就被反爬,所以小编加上了登录后的 cookie:

加上了后,小编发现多得了一页数据,可以爬到 2-3 页,但某些美食种类是直接跳过的没有爬取,数据还是不完整,爬到几页后很快就被反爬
响应 cookie
在加上登录 cookie 后,还是爬取不完整,这时候小编想到了关于网络的知识,cookie 的会话维持,就是说在第一次打开某团,我们需要选择地址才能进入美食界面,服务器会发送一个 cookie 给我们保存,下次访问就直接从 cookie 读取信息,不用在选取地址
想到这里,小编就用了一种方法,就是在爬取第一页后,我们获得此页 cookie,访问下一页后带上此页的 cookie,就携带了地址信息:



带上了每一页的 cookie 后,就没有出现美食种类被跳过的情况了,并且小编试验了一下,可以爬取了,但爬取到一定数量后又被反爬,但这次是 ip 反爬,只需要使用代理即可
ip 代理

我们使用的是第三方付费代理,阿布云代理,效果不错的
Final

这就是我们想要的结果,小编爬取的自己城市,可以换成你所在的城市