Python爬虫四:美团爬虫(店铺信息抓取)

 环境:Windows7 +Python3.6+Pycharm2017

目标:抓取美团美食移动端 深圳地区店铺的信息,包括:店铺名称、分类、地址、电话、人均消费、营业时间、评分、评价人数、经纬度。最后抓取2.1W条信息,程序运行约1h。工具(requests、selenium、chrome)

---全部文章: 京东爬虫 、链家爬虫、美团爬虫、微信公众号爬虫、字体反爬、Django笔记、阿里云部署、vi\vim入门----

一、美团桌面端

打开深圳美团https://sz.meituan.com/,点击美食,F12进入浏览器开发者模式。点击右上方Network和XHR,然后随便点击一个分区,比如香蜜湖。可以抓到一个请求叫:getPoiList?cityName=XXXXXXXX。点击可以看到请求的url中有一个参数_token。这个token参数应该通过某种算法算出来的,如果要模拟浏览器发请求,首先要知道如何生成token。这个token应该是通过JS生成的,一般遇到js加密的,要么破解加密原理,然后自己用代码实现。要么就是直接调用它的js代码。而且这个参数估计是最近几个月才加进去的,网上查了一遍也没有找到解决办法,自己看js文件也看不出什么,所以桌面端只能放弃。如有大神知道怎么处理这个token,望告知,谢谢!!如果真要拿token,用selenium+chrome应该也可以,每个token应该有一段有效期。

Python爬虫四:美团爬虫(店铺信息抓取)_第1张图片

二、美团移动端 

桌面端搞不定,只能选择其他途径。现在很多网站都会有桌面版,移动版,还有APP,一般移动版的反爬会简单些。打开美团移动版 https://i.meituan.com/ ,F12打开浏览器开发者模式,可以点击下图1处的两个方框,模拟手机浏览器。

Python爬虫四:美团爬虫(店铺信息抓取)_第2张图片

 然后点击美食,进入下图界面,看到右边的两个请求。第一个请求是页面的基本框架信息,比如上面各种分类信息,后面会用到。第二个请求list,是一个动态请求,用以获得商家信息。点击发现是一个post请求,请求的参数如下图红框中所示,多点击几家店铺就能看出参数的含义。变化的就四个参数areaId--地区分类、cataId--美食分类、offset--翻页参数、uuid--网站分发的id。

Python爬虫四:美团爬虫(店铺信息抓取)_第3张图片

Python爬虫四:美团爬虫(店铺信息抓取)_第4张图片

直接模拟浏览器发送post请求,修改offset来实现翻页,每页有15条数据,每翻一页 offset值加15。实测在当前美食页面下直接翻页,最多能翻67页,1005条数据,后面好像出验证码还是没数据返回了。所以我们要对店铺进行分类抓取。

我们需要的信息在店铺的详情页面,一般详情页面的url都是几个关键参数的拼凑,而这几个关键参数是可以在上面的列表页面抓取到的。我们点开一家店铺,观察url,发现主要是两个参数,一个是店铺的id:6268902,还有一个就是ct_poi参数,这两个参数都可以在上面的post请求返回数据中找到。

https://meishi.meituan.com/i/poi/6268902?ct_poi=314286840956592200722254147016600281179_a6268902_c0_e11543712825375195158 

还有就是我们进入页面详情浏览器能捕捉到很多的请求,我们需要的店铺信息 店铺名称、分类、地址、电话、人均消费、营业时间、评分、评价人数、经纬度,是哪个请求返回的,需要确认下。实际就是第一个请求,上面这个url。

Python爬虫四:美团爬虫(店铺信息抓取)_第5张图片

点开第一个请求返回的html代码,直接ctrl+F搜索店铺电话号码,就能找到位置。在一个

你可能感兴趣的:(爬虫)