前几天在网上看到有人说不清楚怎么爬携程的机票价钱,然后自己去大概看了一下,大概知道是怎么回事,现在和大家分享一下分析的过程。

准备工作

我用到Chrome浏览器,Python里的requests库作为发请求的工具。

本次分析的网址是 http://flights.ctrip.com/itinerary/oneway/szx-hak?date=2019-02-01 深圳到海口的机票查询

分析过程

寻找URL

网页:

之后谷歌浏览器F12里Network标签看一下

通常机票价格这种东西都是通过ajax动态拉数据的,而且刷新页面的时候也可以明显感觉到页面的其它部分先刷新出来,而机票信息是延迟出现的,也可以说明是ajax动态获取的。

可以看到记录很多,那要怎么找到机票价格的那条记录呢?可以直接用谷歌的过滤XHR过滤出所有的ajax请求。

直接过滤了很多请求,只剩一点点了。这个时候最简单的就是直接一个一个看,分析各个请求的响应是不是我们要找的那个带有价格的相应。

很快可以找到,products这个请求就是包含所有价格信息的请求,我也要爬的话也是爬这个请求。

其实还有很多方法,比如说我们逐个block掉每一个ajax请求,再刷新,如果页面无法正常显示价格信息,那么是哪个请求也就一目了然了。

模拟请求

此时我们已经找到了需要模拟的请求和一些http的参数信息。

我们需要关注的信息都在图中标记出来了。(以下内容需要先了解HTTP协议知识)

1、URL  http://flights.ctrip.com/itinerary/api/12808/products

2、POST 请求方式

3、其他头部和参数信息。。。

经过测试呢,发现携程后台关注的有:header有Content-Type,Origin,Referer,User-Agent,参数信息payload

(不要问我怎么测试的,因为我是一个一个试的,如果有好方法还望告知。)

Python 爬虫实例

import requestsurl = r'http://flights.ctrip.com/itinerary/api/12808/products'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3559.6 Safari/537.36','Referer': 'http://flights.ctrip.com/itinerary/oneway/szx-hak?date=2019-02-01','Origin': 'http://flights.ctrip.com','Cookie': 'Union=SID=155952&AllianceID=4897&OUID=baidu81|index|||; _abtest_userid=2a37843e-d51d-454c-ba6d-eefa4d9c90a1; _RSG=oQqm4Yqsys9dzRnmgbNpLA; _RDG=28f2fc6e9d70062c97350fbeeda9227140; _RGUID=9dbcdb48-84c3-46b2-a573-5e5ab0c5bf67; _ga=GA1.2.1360299268.1548776753; traceExt=campaign=CHNbaidu81&adid=index; MKT_Pagesource=PC; StartCity_Pkg=PkgStartCity=2; Session=SmartLinkCode=U155952&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=&SmartLinkLanguage=zh; gad_city=246c9f05866ade9bb4e3fdabb004e6be; _gid=GA1.2.1667701804.1548945569; FD_SearchHistorty={"type":"S","data":"S%24%u6DF1%u5733%28SZX%29%24SZX%242019-01-31%24%u6D77%u53E3%28HAK%29%24HAK%24%24%24"}; _RF1=121.35.182.69; _bfi=p1%3D10320673302%26p2%3D10320673302%26v1%3D25%26v2%3D24; _gat=1; _bfa=1.1548776750288.32qtq1.1.1548779881067.1548945551633.3.27; _bfs=1.7; Mkt_UnionRecord=%5B%7B%22aid%22%3A%224897%22%2C%22timestamp%22%3A1548947156839%7D%5D; _jzqco=%7C%7C%7C%7C1548945585011%7C1.1062907472.1548776753189.1548947147237.1548947156855.1548947147237.1548947156855.undefined.0.0.25.25; __zpspc=9.4.1548945570.1548947156.7%231%7Cbaidu%7Ccpc%7Cbaidu81%7C%25E6%2590%25BA%25E7%25A8%258B%7C%23','Content-Type': 'application/json'}payload = '{"flightWay":"Oneway","classType":"ALL","hasChild":false,"hasBaby":false,"searchIndex":1,"airportParams":[{"dcity":"SZX","acity":"HAK","dcityname":"深圳","acityname":"海口","date":"2019-02-01","dcityid":30,"acityid":42}]}'r = requests.post(url, headers = headers, data = payload)with open(r"e:\1.txt", 'w') as f:f.write(r.content)

这样爬取携程机票价格的第一步就完成了。

接下来的工作主要就是分析cookie的来源和payload的组成以及响应信息的结构。

总结

不知是不是我技艺不精,目前为止,携程在这个页面的反爬虫机制不是很完善,但是不知道会不会在cookie做很多限制。总之多多练习就明白各个网站的组成。ps:本文仅供学习参考。

和你一起分析网站 - 之携程(机票价格)相关推荐

  1. python+selenium 爬携程机票价格

    自己留着用的一个小工具 出发地目的地在url变量里 #!/usr/bin/env python #encoding=utf-8 import time from selenium import web ...

  2. tp5.1 获取表里的所有数据_携程机票数据仓库建设之路

    一.前言 随着大数据技术的飞速发展,海量数据存储和计算的解决方案层出不穷,生产环境和大数据环境的交互日益密切.数据仓库作为海量数据落地和扭转的重要载体,承担着数据从生产环境到大数据环境.经由大数据环境 ...

  3. 转:携程机票前台埋点二三事

    一名数据人如果连埋点和指标模棱两可,则根基不稳,随口一反问都可能成为定时炸弹,坍塌整个分析过程.如果你认为埋点只是开发的问题,数据人是拿现成的数据来写sql.完成分析,未来路可能会越走越窄. 我的理解 ...

  4. tkmybatis 子查询_日均20亿流量:携程机票查询系统的架构升级

    携程机票查询系统,日均20亿流量,且要求高吞吐,低延迟的架构设计.于是,提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能的关键.本文是携程集团机票业务技术总监宋涛在「云加社区沙龙onl ...

  5. 干货 | 携程机票Sketch插件开发实践

    作者简介 尹正波,携程机票研发部前端工程师,专注设计和开发的交叉领域,用系统和工具改进设计体验和交付. Sketch 是伴随移动应用程序崛起而流行的 UI 设计工具.2014年 Sketch V3 增 ...

  6. python爬取携程机票并发送过滤后的机票信息到指定邮箱

    0x0 前言 在疫情发生之前,在知乎上刷到一个回答,说是用服务器实现一个自动爬取机票并将过滤后的机票信息发送到自己的邮箱中,感觉十分有趣.由于疫情原因无法返校,加上家和学校相隔接近3000公里,再加上 ...

  7. 日均20亿流量:携程机票查询系统的架构升级

    一. 机票搜索服务概述 1. 携程机票搜索的业务特点 首先简单介绍一下机票的搜索业务:大家可能都用过携程,当你去输入目的地,然后点击搜索的时候,我们的后台就开始了紧张的工作.我们基本上会在一两秒的时间 ...

  8. 当谈到携程机票产品经理的数据意识,我们在谈什么?

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  9. 干货 | 携程机票 App KMM 跨端生产实践

    作者简介 禹昂,携程移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. Derek,携程资深研发经理,专注于移动端开发,热衷于各种跨端技术的研究和实践. ...

最新文章

  1. Msg3最大传输次数(maxHARQ-Msg3Tx)
  2. 社交应用动态九宫格图片的规则
  3. React 性能优化之批量处理 unstable_batchedUpdates
  4. 互联网组织的未来:剖析GitHub员工的任性之源
  5. 【白皮书分享】2020双十一五大趋势洞察白皮书.pdf(附下载链接)
  6. js+svg实现的一个环图
  7. 文件服务器自动化管理
  8. 前端每日实战:76# 视频演示如何用纯 CSS 创作一组单元素办公用品(内含2个视频)...
  9. Protues仿真 8X8 LED点阵
  10. 色度抽样(4:2:0)到底是什么意思?
  11. 大疆御2电池数据查看教程
  12. 基于Springboot的大学生社团管理系统
  13. Matlab exercise04
  14. 在线教育项目技术笔记2
  15. Redis从库失败导致集群概率读不到
  16. 基于javaweb的房屋租赁系统(java+ssm+jsp+mysql)
  17. 基于SSM和Boostrap实现的电影评论网站设计 毕业论文+外文翻译及原文+项目源码
  18. 盛世昊通PCC通证支付板块, 通证经济引爆新一轮数字经济革命
  19. 计算机右侧不显示桌面,电脑桌面的右下角不显示移动设备的图标怎么办?
  20. 全国热门带正文新闻查询API接口

热门文章

  1. 删除logs mysql_关于删除MySQL Logs的一点记录 - 刘浩de技术博客
  2. 奋斗的小鸟——dogxuefeng Oracle——distinct的用法
  3. 四色猜想的推论式证明_Donqy
  4. Excel写保护怎么破解
  5. 【论文分享】Automatic Generation of Data-Oriented Exploits
  6. 技术大比武之一:什么是元数据
  7. <基础算法>十大排序算法总结
  8. 报错incorrect username or password ( access token )
  9. Babel 学习与使用
  10. 校验身份证号码格式是否正确