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

来源:互联网 发布:实况足球数据网站 编辑:程序博客网 时间:2024/04/26 09:23

本文发表于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经度
这里写图片描述

按F12打开Chrome的调试工具,回到页面,将页面下拉,触发加载店铺列表的ajax请求,如图
这里写图片描述


分析请求信息

这里写图片描述

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


分析返回内容

将此请求拿到的json格式化(直接粘贴到json.cn):如图
这里写图片描述
这个包可以得到店铺列表中所有店铺的概况信息,包括起送价,配送费等,poilist对象数组就是店铺列表所在,记录下id字段,后续将用到

模拟提交测试

这里写图片描述
注意此处使用C#的HttpWebRequest类进行提交时,应该将Http版本修改为1.1,并且设置Expect100Continue为false

采集店铺详细信息

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

证件地址
这里写图片描述

模拟提交

这里写图片描述


总结

分析下来可以看到所有用到的接口都和经纬度挂钩,其中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;

题外话

想知道token值怎么得到的朋友见另一篇博客C#中CefSharp的简单使用

此处点到为止

本文更新于2017年11月6号

原创粉丝点击