携程平台的酒店、景点、评价数据还是比较有意义的,可用作数据分析研究,目前均可采集。酒店价格需要登录采集,其他店名、地址、经纬度、评分、评价数、特色标签等都可以直接采集。
携程酒店数据示例:
酒店id:536424
酒店名:锦居酒店(成都金融城银泰中心in99店)
星级:4钻
酒店标签:['免费停车', '自助早餐', '棋牌室', '会议厅', '无烟楼层', '干衣机', '下午茶', '免费客房WiFi', '管家服务', '健身室']
与携程:携程战略合作酒店/供应商,提供高质量服务及实惠价格。
评价数:600
封面图地址:网址屏蔽此处不展示
总分描述:棒
总分:4.8
环境分:4.8
卫生分:4.8
设施分:4.8
服务分:4.7
地址:锦晖东街208号
街道商圈:金融城/双子塔附近地区
距离市区:距市中心直线8公里
经度:104.072935
纬度:30.586253
城市:成都
城市id:28
这里是批量采集全部酒店的基础信息,对于酒店的详情,乃至具体评价,需要针对每个酒店单独采集。同样的,携程的景点及其评论采集同理。
这里提一下采集的流程,因为携程采集的难点testab参数还是比较有通用性意义,不少平台都用到了这类js加密。
携程的各类数据请求都是标准的前后端分离,后端请求都是标准的post请求然后返回json,这类请求稍微学一下编程的人都能采集,但是有testab这个大杀器就拦住了绝大多数人。
携程酒店基础信息的接口是HotelSearch,仔细看这个接口会发现,除了常用的payload请求参数(控制请求页码、单页数量、城市、排序方式、入驻日期等,顺便单页数量实测最大上限返回值是100,但会漏数据,所以还是默认用10个就行),还带了一个testab参数。
不带这个testab参数请求,服务器是不会返有效数据的,而这个testab的参数是动态的,并且在浏览器中使用了一次就会失效。
跟踪网页请求发现这个testab参数是由平台的一个js文件动态生成的,所以核心就是得到这个js计算的testab参数。
目前网上通用的方法是两种:
第一种是补全js环境法,通过把这个js下载下来,然后在自己本地运行js得到参数结果。
第二种是纯算法,学习这个js文件的代码,研究他testab的算法,自己用任意语言写一个算法出来。
这两种方法都需要对js比较熟悉,能读懂js代码,要很有耐心打断点一路研究js或者补环境。对我而言js语法看着就丑陋非常不直观,一直学不进去也没啥需求,最早用C语言做类MFC和Java的J2EE,现在只用Python非常友好。所以想找一种既不补js环境,也不研读js代码的方法。
思路很明确,既然不想补本地js环境,那直接用浏览器环境不就可以了,简单说就是在浏览器运行这个js文件,生成了testab参数后输出给我就可以了,同时要打断js的后续执行不让发起接口请求,因为生成的testab在浏览器里请求后就会失效。
还是需要修改一点js,不过不多,忍着不适微调几个地方就可以了,具体流程方法有偿咨询,一法通万法通不少网站的动态js加密参数都可以这样处理。
拿到testab后,携程数据采集易如反掌。顺便提一句,请求时候的排序不要用默认排序,会漏返数据,不知道是如高德那样风控故意漏返,还是单纯的接口不准确。
接数据采集、数据治理、业务流程自动化、计算机问题处理服务。