爬虫实战----美团外卖商家数据接口分析

本文发表于2017年11月6号,不保证其在之后的时间仍适用,只作例子分享

##准备工作##

  1. 抓包工具:Fiddler,Firebug等工具,此文使用Chrome浏览器自带的抓包工具
  2. 模拟提交工具:参数化Http请求 详情见基于C#的Http参数化请求工具

##接口分析(从H5端入手)##

###首先进入美团外卖h5的商家列表页###

示例地址:http://i.waimai.meituan.com/home?lat=37.434075&lng=122.196679
从地址格式中可以看到 参数此链接有两个参数 分别是lat 纬度 lng经度
爬虫实战----美团外卖商家数据接口分析_第1张图片

按F12打开Chrome的调试工具,回到页面,将页面下拉,触发加载店铺列表的ajax请求,如图
爬虫实战----美团外卖商家数据接口分析_第2张图片


###分析请求信息###
爬虫实战----美团外卖商家数据接口分析_第3张图片

标记的内容是后续将要用到的信息,cookie中需要包含经纬度信息,通过观察可以发现,小数点被抹平,并且纬度保持在8位,经度保持在9位。referer就是示例地址(见上文)。查询字符串中,有用的参数也是经纬度信息(别去管_token)。请求体中page_index参数表示请求的页数索引。


###分析返回内容###
将此请求拿到的json格式化(直接粘贴到json.cn):如图
爬虫实战----美团外卖商家数据接口分析_第4张图片
这个包可以得到店铺列表中所有店铺的概况信息,包括起送价,配送费等,poilist对象数组就是店铺列表所在,记录下id字段,后续将用到

模拟提交测试

爬虫实战----美团外卖商家数据接口分析_第5张图片
注意此处使用C#的HttpWebRequest类进行提交时,应该将Http版本修改为1.1,并且设置Expect100Continue为false

###采集店铺详细信息###

返回到页面,点击进入一家店铺,首先查看链接格式http://i.waimai.meituan.com/restaurant/ + “id” 其中id就是上一步中记录的id字段**(这个Id是基于一定的算法生成的,在网页端中有效期为2小时左右,h5中本人未作测试)**
同样使用调试工具抓到这个包
爬虫实战----美团外卖商家数据接口分析_第6张图片
格式化此接口返回的数据,可以看到店铺详情
爬虫实战----美团外卖商家数据接口分析_第7张图片
上面的接口没有店铺的证件信息
爬虫实战----美团外卖商家数据接口分析_第8张图片

证件地址
爬虫实战----美团外卖商家数据接口分析_第9张图片

模拟提交

爬虫实战----美团外卖商家数据接口分析_第10张图片


##总结##
分析下来可以看到所有用到的接口都和经纬度挂钩,其中Url中的经纬度和Cookie中的不一样。C#的Http请求是一个坑(FrameWork 4.0),这几个接口中使用默认的1.0版本的Http版本将无法正确获得数据(但是带上token值可以获取一次,苏飞的Httphelper框架默认使用了1.1版本所以直接能用)

附上Http版本和Expect100Continue设置方法

首先引用名空间

using System.Net;

设置

#region Request创建
	WebRequest webRequest = null;
	try
	{
		//创建一个WebRequest
		webRequest = WebRequest.Create(RequestUrl);
	}
	catch
	{
		Console.WriteLine("初始化Request出错:{0}", RequestUrl);
		return null;
	}
#endregion
	//强制转化为HttpWebRequest
	var Request = webRequest as HttpWebRequest;
	//设置100Continue行为
	Request.ServicePoint.Expect100Continue = true;
	//设置HttpVersion
	Request.ProtocolVersion = HttpVersion.Version11;

##20190515更新##

想知道token值怎么得到的朋友见另一篇博客美团外卖Token值计算(借助CefSharp)

爬虫实战----美团外卖商家数据接口分析_第11张图片

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