HTTP抓包和Python爬虫获取7天酒店免费房信息

   日期:2024-12-27    作者:hjshuwenjie 移动:http://3jjewl.riyuangf.com/mobile/quote/61337.html

其中必要重要的一个包是/hotel/query/ota/basic的这个包。
其发送的JSON为

HTTP抓包和Python爬虫获取7天酒店免费房信息

其中需要关注的几个值分别是

  • token:这个值需要自己抓包来获取,具体生成机制不明,但是很久都不会变。
  • checkInDatecheckOutDate分别是入住和离店时间的时间戳,在爬虫中可以用time.time()来生成。
  • city就是utf-8编码的城市名cityCode也需要抓包获得。

接收到的JSON为

其中data存储了每个酒店的一些基本信息,点开可以获得,此处需要关注的值是

  • hotelSum指出查询的城市的酒店数量
  • data中获取chainCodeinnName分别就是酒店的编号和酒店名。

然后,随便点开一家7天酒店,关注/hotel/roomStatus这个包

需要关注的值是

  • token同上
  • beginDateendDate同样是时间戳
  • chainID 和上文中的chainCode相同,都是酒店的编号

至于积分免费房的信息的具体位置,就在返回的JSON中,通过如下的解析判断方式可以获得免费房信息,其中hotel就是返回的JSON字符串经过loads后的字典。

 
 

此时也就完成了所有的准备工作,获取了所有需要的url、request的body及其参数。

二、爬虫编写
因为代码较长,故不在此放出,请移步github

下载后需要在项目中新建一个token.ini配置文件,内容是

 
 

代码主要分为两个文件

运行hotel.py获得指定城市的所有7天酒店列表,用SQLite进行存储,因为每个城市只需要最多几次的请求,所以没有引入多线程。
运行示例如图

数据库中将存储如下数据。其中其中free_room指的是酒店是否有免费房,默认是0,提供则为1。

运行room.py获得指定城市所有酒店的免费房状态。其中指定了城市,指定了查询日期距离当天的天数,例如查询当天信息则为0。

因为一个城市中需要查询的酒店数量在几十个左右,网络IO占据了大量时间,多以引入了多线程来爬取酒店的免费房信息,同时考虑到不要给服务器带来太大的负担,因此只是在一秒钟进行10个请求。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号