一次爬美团网美食团购的经历

数据森麟

共 1954字,需浏览 4分钟

 ·

2020-04-05 23:28

08951d5720cf8de93c8b2ea73aa868d8.webp


     作者:刘早起早起


     来源:早起python


在之前的文章Python告诉你想开一家美食店该怎么做该怎么做中,我们爬取了美团网美食栏目下相关商家数据进行了分析,那么本文就具体讲解怎样从美团网获取我们需要的数据,我在爬取数据过程中又经历了哪些坑074e0f49f6f3adba6b35326cd58ef01e.webp


b8c4a8ade631bf8d59d9dce9139f8525.webp

在一开始还是选择去一些技术网站看看有没有思路可以借鉴,根据搜索结果我将相关帖子分为两类,一类是已失效的代码,另一类是吐槽为什么美团的反爬机制这么变态。所以自己想办法解决。还是先打开目标页面看一下

7fa8189e587a6cfb512f81a7f00f63b7.webp

通过切换区域可以发现页面的内容是通过Ajax异步请求技术得到的,简单来说就是能够实现在后台与服务器交换数据,在不重新加载页面的情况下更新网页。所以打开浏览器F12,进入开发者工具,选择Network,刷新页面,选择XHR(XmlHttpRequest)就可以选出Ajax的请求包

0d33b8b12e4ce84da9051eed9fcc54c8.webp

通过check preview的内容很轻松的就能从几个数据包中找到我们需要的那一个,再看下headers信息找到Requests URL

fb5dbbaaeaf8905b7666e12714f150be.webp

我们先打开一下这个URL试试?

dfd6268604abbaa6b7a09c434f6f6d8b.webp

OK返回的是一个json数据,心中暗喜,这不是搞定了吗,再定睛一看

3db66eb08641efce274db93e21c67d6c.webp

这除了给了一个店铺名和地址还有评分就完了,就这点信息拿什么去分析,回想了一下刚刚查阅的一些其他大神曾经写的代码明明还有优惠券等信息,于是翻回之前的相关文档,通过对比发现只要在URL中添加userID就能返回更多的店铺信息

d9263a1ffcbaa8086489d4c40c535f62.webp

心中再次暗喜,虽然这只是一页的数据,我再写个循环多取几页不就能取一些数量的数据用于分析了吗,所以抓紧操作起来

url_list = []
for _ in range(1,31):
    url = 'https://hz.meituan.com/meishi/api/poi/getPoiList?cityName=%E6%9D%AD%E5%B7%9E&cateId=0&areaId=0&sort=&dinnerCountAttrId=&page=' + str(_) + '替换为你F12之后URL中page参数后对应的字符'
    url_list.append(url)

OK,这样一操作之后30页的URL就有了,再用requests去请求数据不就完事了,先测试一下

headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
 "Host": "hz.meituan.com",
"Referer": "https://hz.meituan.com/meishi/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"}

data = requests.get(url,headers = headers).json()

和我们预想的结果一样,那么接下来写个循环去取30页数据并保存不就收工了

41050274f3901183b2bd4c936bbf7796.webp

但是自己还是太年轻,程序没有跑几秒就直接异常了,也设置了请求频率怎么还是挂了,没事我们先看下怎么回事,浏览器打开刚刚的API试试

5af2f47ea8bdbaedd47965b521e9ea98.webp

哦吼,这是API直接整挂了吗?难道是更换地址了?再从首页进美食栏目试一下

5af2f47ea8bdbaedd47965b521e9ea98.webp

再定睛一看,这还是美团还单独做了一个页面。不管怎么访问美团都是返回error403

3bf3f8b4f8c7dea80d578165d752f298.webp

不要慌,我们设置一下代理IP,再换个UA,伪装一下再去请求,可是在换了数个代理IP之后,并且不管是用代码还是用浏览器正常请求返回的永远是

5af2f47ea8bdbaedd47965b521e9ea98.webp

没事requests 请求不行,我用selenium试试,还是不行,再换手机试试,结果还是一样无访问,现在开始慌了,难道一行代码就把美团服务器干趴了

9e8f82092d98681fc904a0ee615b26ed.webp


再经过几个设备测试,可以确定只是我的电脑被美团ban掉了,可是怎么连我的手机也不行,难道是因为同一个Wi-Fi还是登陆了同一个账号

54ae9baf201a91d5c919fddac4ad8d2e.webp


那最后是怎么解决的,三个字:慢慢来


◆ ◆ ◆  ◆ 




长按二维码关注我们



数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:



猜你喜欢

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 全球股市跳水大战,谁最坑爹!

 上万条数据撕开微博热搜的真相!

 你相信逛B站也能学编程吗?

浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报