最近由于工作需要,做了一个携程酒店的爬虫,初步达到了一些成果。
由于python是半路出家(之前笔者是学习java的,并且现在也一直在学习。),在把项目分
享出来看能否给网友们一些帮助的同时,也希望有大佬帮我改进改进。
废话说的过多,直接上货。



感觉爬虫和侦探进行破案有点类似,一点一点线索抽茧剥丝

  • 首先看按照地市搜索的url
    https://hotels.ctrip.com/hotel/hangzhou17#ctm_ref=hod_hp_sb_lst
    分析可得会地市不一样的话只是在上述链接中 hangzhouo17 部分发生改变,杭州倒是看得懂,不过后面的17是什么鬼,F12看请求,发现了这一个
    这里就有地市字母和数字的联系,但是仍然不知道对应关系是啥,知其然不知其所以然,那不管了,拿到再说。

  • 分析分页的url
    查看network页面,可以看到在Header的Form Data里带有请求参数,而且这是一个POST请求,那么分析可得分页代码如下
# for num in range(1,page_size): #这里是循环所有的分页,因为数据量过大,先就意思一下# 只拿到第一页
num = 1
cityid = 17
# 拼接url   cityid为杭州对应的id,这里只需要数字,不需要字母
hotel_list_page_url =  'https://hotels.ctrip.com/Domestic/Tool/AjaxHotelList.aspx?cityId='+str(cityid) +'&&page='+str(num)'
result = requests.get(hotel_url, headers=getHeader())result.encoding = 'utf-8'print(result.text)

然后看一下输出的result,

就这么神奇,发现请求回来的json格式数据中,有一个hotelpositionJSON就是我们需要的东西,那么解析页面啥的,可以,但没必要。其实里面还有更多的东西,例如hotelMapStreetJSON的数据,看起来就是酒店对应的经纬度

listdata = json.loads(fixed)
# 对数据进行json解析,然后直接拿到hotelPositionJSON系列数据
hotelPosition = listdata['hotelPositionJSON']
for hotel in hotelPosition:hotel_data = {} # 创建一个列表来储存酒店的基本信息hotel_data['name'] = hotel_info['name']  # 酒店名称hotel_data['address'] = hotel_info['address']  # 酒店地址hotel_data['score'] = hotel_info['score']  # 酒店评分hotel_data['stardesc'] = hotel_info['stardesc']  # 酒店评分描述hotel_data['url'] = hotel['url']  # 进入酒店详情页的url后缀

好了,至此案件破解的十分顺利,那么继续破案,真相只有一个!


  • 开始进入酒店详情页
    分析可得酒店详情页就是’https://hotels.ctrip.com’加上上述的url后缀

    一看到这个给力加载中,就知道是动态页面加载了,直接去F12查看吧。
    找到了一个超级可疑的嫌疑人,

    前面有一大串花里胡哨的乱码中文,不管,透过现象看本质,发现有个html的数据很有嫌疑,分析重构这个请求,于是乎…
 startDate = datetime.date.today()oneday = datetime.timedelta(days=1)depDate = startDate + onedayhotel_url1 = 'https://hotels.ctrip.com/Domestic/tool/AjaxHote1RoomListForDetai1.aspx?MasterHotelID='hotel_url2 = '&hotel='hotel_url3 = '&city='hotel_url4 = '&startDate='hotel_url5 = '&depDate='# 分析发现ajax的请求可以通过这个链接拿到(postman是个好东西)hotel_final_url = hotel_url1 + str(hotelId) + hotel_url2 + str(hotelId) + hotel_url3 \+ str(cityId) + hotel_url4 + str(startDate) + hotel_url5 + str(depDate)
hotel_xba = requests.get(hotel_final_url, headers=hotelHead)
data = json.loads(hotel_xba.text)
print(data['html'])

顺利拿到,一路顺利的有点得意忘形,中间的辛酸苦楚也就自己知道了 T T
接着来吧。。

hotel_detail_html = etree.HTML(data['html'])
room_info = {}
room_name = hotel_tr.xpath('td[1]/a[2]')[0].text   # 房间名
room_type = hotel_tr.xpath('td[2]/span[1]/text()')[0] # 房间类型
bed_type = hotel_tr.xpath('td[3]/text()')[0] # 床型
breakfast_type = hotel_tr.xpath('td[4]/text()')[0] # 早餐类型
per_price = hotel_tr.xpath('td[2]/@data-price')[0] # 原先价钱
room_discount_text = hotel_tr.xpath('td[8]/div/div[2]/span/text()')[0]
room_discount_price = regex.sub('\D', '', room_discount_text) # 优惠价钱
rel_price = int(per_price) - int(room_discount_price) # 实际价钱

好了,至此拿到了所需要的所有信息。
跑程序结果如下。

后面创建了两张表来持久化这些数据,
一张酒店表记录酒店的一些信息。

一张房间信息表来记录各个房型的价钱等


注:有些情况需要处理,因为数据量过大,导致程序运行时间太长。而且在运行一定时间后会遇到携程的反爬机制。还有在找一些信息的时候,有些会没有,这样的话需要去做一个判断等,程序还是有较多问题的,代码完整版到时候我贴上GitHub的地址。
GitHub地址:https://github.com/geeemini/XCSpider
GitHub超萌新感觉不会用鸭。。

Pyhton携程上酒店每个房型价钱详细的爬虫相关推荐

  1. 滴滴打车比别人贵?携程订酒店比别人贵?商家拿你的数据去作恶你知道吗?

    在庞大的数据面前,人类越来越像一个提供输入的变量角色,任何试图伪装和保护自己的举动,在360度无死角的数据监控下都显得徒劳.你使用的APP,在试图了解和定义你. 律师李欣然(化名)第一次对某大型旅行票 ...

  2. 携程商旅酒店直连平台的实践(一)

    现在才发现,离我上一篇博文竟然接近1年没有发过东西了.惊呆了我.我要每周都写了,就算不写技术也要写其他东西,不然真的是思考的多,没有留下记录都是空白. 在携程商旅主要做酒店直连这一块.商旅酒店其实架构 ...

  3. 干货 | 机器学习模型在携程海外酒店推荐场景中的应用

    "关于作者:Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地. 大数据产业创新服务媒体 --聚焦数据 · 改变商业 导读 互联网企业的核心需求是& ...

  4. python爬携程上出境游数据_python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  5. Android自定义日期区间选择日期范围选则的日历,实现类似美团携程选择酒店入住日期和离店日期的日历效果

    前言 有时候我们会有需要在日历上选择一个日期范围的这种需求,先选一个开始日期,然后再选结束日期,如酒店入住日期和离店日期选择,美团携程这种预定酒店的app都有这种操作.那么这种需求该如何实现呢?先看一 ...

  6. 机器学习模型在携程海外酒店推荐场景中的应用

    导读 互联网企业的核心需求是"增长",移动互联时代下的在线旅游业也不例外.随着大数据.云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心. 近年来推荐系统迅速崛起 ...

  7. 千亿级携程酒店AWS实践

    作者简介 微末,携程软件技术专家,关注系统架构,致力于高可用高性能的支撑业务系统开发. 一.背景 随着携程海外酒店业务的发展,遍布全球的海外供应商与携程总部IDC之间的数据传输量快速增长.技术上,这种 ...

  8. 借大数据玩自主酒店,携程的酒店业之困能不能解?

    近年来旅游业的蓬勃发展,使OTA看似表面风光无限,实则背地里却面临着互联网流量红利的消失,无奈都在勒紧裤腰带过日子. 就连OTA巨头携程也不能幸免于难,为了寻找新的红利和防止传统酒店自行开发预订平台给 ...

  9. Python爬虫爬取酒店评价(携程)

    Python爬虫爬取携程酒店评价 审查携程酒店评价页面 最经有个需求是爬携程上某酒店的用户评价,在审查评论界面后发现了以下请求,贴一下: https://hotels.ctrip.com/Domest ...

最新文章

  1. 悠悠二十载,Nginx创始人Igor宣布离职
  2. Hadoop vs Spark
  3. java http2_java的okhttp3库中,客户端如何开启http2协议支持
  4. PCL:PCL1.9.0更新
  5. ReportViewer中设置ServerReport.ReportServerCredentials属性的方法(WEB版)
  6. 【Kafka】Kafka eagle 监控界面无数据
  7. Android的广播接收器BroadcastReceiver
  8. Jmeter使用方法
  9. java开发工具比较(16个工具修订版)
  10. linux下python、django框架的配置
  11. 数值计算值第四期:解线性方程组的扰动分析
  12. 缓解眼睛疲劳:按摩+复调钢琴曲
  13. Linux 打开文件显示: No such file or directory
  14. DELETE * FROM和DELETE FROM的区别
  15. vim 编辑器常用操作
  16. win7-32位系统,不能运行flash,解决方法。
  17. Spring Data Jpa使用QueryDsl接口出现的一些问题
  18. 2种RamDisk的读写速度
  19. c# ListBox控件
  20. Dubbo入门教程,谈谈为什么要用Dubbo?

热门文章

  1. C++_重载矩阵的部分运算符
  2. java 获取对象的字节数
  3. 标北京大兴企业代理记账收费
  4. Linux虚拟机启动报错挂载点丢失
  5. CSS3 3D旋转动画
  6. 添加 中科大linux源,CentOS配置网易163 中科大 yum源
  7. 基础+优化+架构一键搞定,华为大佬的“百万级”MySQL笔记
  8. Excel实现动态行转列(数据透视表)
  9. 控制第三方数据风险应成为网络安全的重中之重
  10. 抓住兴趣点,安排出自己的学习