又到了一年一度的国庆假期。今年国庆、中秋撞到一起,所以打算回家过节。从帝都到海口,每到节假日的机票都是全价票…2400大洋的单程票,消费不起呀!所以为了买到便宜点的机票,我就写了一个简单的爬虫来监控机票价钱。

可能有人会觉得,阿里飞猪,携程什么的都有监控,何必自找麻烦。对于一个程序员来说,能自己做到的事情就不会去使用别人的东西。而且他们的产品不一定能满足我的需求啊。废话不多说,正文分割线!

分析目标地址

跟以前一样,爬虫第一件事。分析目标,看他是怎么处理机票查询。

地址:https://jipiao.jd.com/

进入查询页面后,发现京东查机票。一共发了三个异步的get请求来请求机票数据。

这里,我也没弄明白为什么京东要使用3个请求来获取机票信息。多次测试发现,这三个请求中会有概率查不到机票。既然这样,我们代码中也请求三次,直到拿到机票结果信息。

构建请求

首先我们需要构建一个get请求,把参数一起传过去。

#模拟请求头(可以根据自己浏览器访问,直接copy过来。)

headers = {

'Host': "jipiao.jd.com",

'Accept-Language': "zh-CN,zh;q=0.8,en;q=0.6",

'Accept-Encoding': "gzip, deflate, br",

'X-Requested-With' : 'XMLHttpRequest',

'Connection': "keep-alive",

'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"

}

#requests.session(),这样的requests请求,会带上前一次请求的sessionid

roon_session = requests.session()

#请求所携带的参数。需要哪些参数,分析目标地址。

payload = {'depCity': '海口', 'arrCity': '北京', 'depDate': '2017-10-08', 'arrDate': '2017-10-08', 'queryModule': '1',

'lineType': 'OW', 'queryType': 'jipiaoindexquery'}

#请求目标

url = 'https://jipiao.jd.com/search/queryFlight.action'

#以json分方式读取请求结果(结果返回的是一个json)

page = roon_session.get(url,headers=headers, params=payload,proxies=proxies).json()

非常简单,几行代码。我们的请求url就构建好了。以上代码直接就能拿到京东的机票查询结果。注释我都写在代码上了,非常简单易懂,这里就不多说。

完整代码

请求代码写完之后,基本上就没有什么东西。 接下来基本上是看你如何去做这个请求。主要是程序的完整性,如何去避免产生问题使程序不能继续执行。

这里我是参照京东自己的三次请求,来写这部分的逻辑。

def Get_Plan_Money():

times = 1

headers = {

'Host': "jipiao.jd.com",

'Accept-Language': "zh-CN,zh;q=0.8,en;q=0.6",

'Accept-Encoding': "gzip, deflate, br",

'X-Requested-With' : 'XMLHttpRequest',

'Connection': "keep-alive",

'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"

}

# 使用代理

proxies = {

# 'http': 'http://1.31.23.209:80',

# 'http': 'http://110.243.166.164',

}

roon_session = requests.session()

#代理测试部分

# url = 'http://ip.chinaz.com/'

# page = roon_session.get(url,proxies = proxies).text

# print (page)

# exit()

payload = {'depCity': '海口', 'arrCity': '北京', 'depDate': '2017-10-08', 'arrDate': '2017-10-08', 'queryModule': '1',

'lineType': 'OW', 'queryType': 'jipiaoindexquery'}

url = 'https://jipiao.jd.com/search/queryFlight.action'

page = roon_session.get(url,headers=headers, params=payload,proxies=proxies).json()

if page['data']['flights'] is None:

# payload = {'depCity': '海口', 'arrCity': '北京', 'depDate': '2017-10-08', 'arrDate': '2017-10-08', 'queryModule': '1',

# 'lineType': 'OW', 'queryType': 'jipiaoindexquery','queryuuid':page['data']['queryuuid']}

times = 2

print ('已进行二次请求')

page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()

# if page['data']['flights'] is None:

# print(page)

# exit()

# 为了确保能发送,这里再进行第三次请求(京东的http 请求了四次。)

if page['data']['flights'] is None:

print('已进行第三次请求')

times = 3

page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()

# 为了确保能发送,这里再进行第四次请求(京东的http 请求了四次。)

if page['data']['flights'] is None:

print('已进行第四次请求')

times = 4

page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()

# 为避免第四次请求仍未成功引起程序报错

if page['data']['flights'] is None:

print('四次请求均未成功')

# exit()

print '%s 从%s飞往%s的飞机'%('20171008','海口','北京')

print '一共查询到%s个航班'%(len(page['data']['flights']))

# 创建列表来保存机票价钱

money_list = []

for plan in page['data']['flights']:

print '%s%s-最低价:%s' % (plan['airwaysCn'], plan['flightNo'], plan['bingoLeastClassInfo']['price'])

money_list.append(plan['bingoLeastClassInfo']['price'])

# 将列表排序

money_list.sort()

# print (money_list)

return money_list

主要还是,判断返回的机票数据是否存在,如果不存在再进行一次请求。以上代码,我用定时任务跑了两周,没有出现过一次错误。

运行结果

完善功能

拿到了机票数据,我们就可以做很多事情了。

比如我就做了一个简单的邮件系统,每半个小时监控我设定好的数据,然后给我发一封邮件。上班的时候,每半个小时,一个弹窗我就知道机票价格有没有变动,非常直观。

或者使用这些变化的机票,用来做数据分析。比如国庆期间,哪个航线的机票最便宜,打折力度最大。作为自己国庆出行的一个参考。

当然还可以做很多事情,只要你拿到了这些数据,利用起来是很有价值。

计算飞机票价格python_python爬取京东机票,监控机票,机票价格分析相关推荐

  1. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

  2. [爬虫-python]爬取京东100页的图书(机器学习)的信息(价格,打折后价格,书名,作者,好评数,差评数,总评数)

    Python爬取京东的机器学习类图书的信息 一,配置搜索关键字和页数, 二,查找用到的三个URL的过程 1. 搜索图书的URL 2. 评论总数,差评数,好评数的URL 3. 当前价格与打折前价格URL ...

  3. python爬取京东手机参数_python爬取京东手机价格

    这里我爬取京东手机价格作为事例 timg.jpg 最近刚出了iPhone X,1W元的价格有点实(guo)惠(fen),刘海也很"漂(chou)亮(lou),所以我还是看看国产手机吧,正好闲 ...

  4. 利用python爬取京东华为旗舰店手机信息(价格、型号、颜色、链接等)

    目 录 第一章.前言 1.1.效果展示 1.2.需要用到的库 1.3.原理分析 第二章.代码分开讲解 2.1.对象的定义及初始化 2.1.1.第一至二行 2.1.2.第三至四行 2.1.3.第五至六行 ...

  5. java 爬取京东商品详细信息 价格

    java 爬取京东商品详细信息 价格 获取图中的价格,因为京东的价格有反扒机制,价格通过js加载的,直接通过页面标签是获取不到的,所以我们要去要相应的js. http://p.3.cn/prices/ ...

  6. 用selenium爬取京东平台商品列表,爬取商品名称、价格、店铺信息

    #用selenium爬取京东平台商品列表,爬取商品名称.价格.店铺信息from selenium import webdriver from selenium.webdriver.common.by ...

  7. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  8. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...

  9. 爬取京东本周热卖商品所有用户评价存入MySQL

    爬取京东本周热卖商品所有用户评价存入MySQL       说明 本项目是对(爬取京东本周热卖商品基本信息存入MySQL)项目的追加,所以会有一些内容上的衔接,例如工具的使用方法等在此篇就不赘述,大家 ...

最新文章

  1. Java-ORM数据库框架CDM介绍
  2. python pip安装解决方法
  3. C 函数 strstr 的高效实现
  4. JavaScript中call()和apply()的用法及区别
  5. SAP FICO PA 模拟题
  6. c语言ssl通信,利用 OpenSSL 的 C/S 安全通信程序设计
  7. 【机器学习】集成学习知识点总结二
  8. 学习进度(2016.3.13)
  9. linux登录界面主题,Ubuntu 12.10登录界面主题:Butterfly
  10. IDEA开发WebService遇到的问题和SOAPUI工具的使用
  11. 纠结的rename命令
  12. [读书笔记]iOS 7 UI设计 对比度
  13. kettle中止是怎么用的_【Kettle】第一篇,Pan 的使用
  14. 全球系留无人机系统行业调研及趋势分析报告
  15. canvas简易人机五子棋
  16. jic标准_JIC螺纹技术资料.doc
  17. Mac快捷键(用到什么整理什么)
  18. 免费开源网站系统有哪些
  19. 用java实现电脑的usb功能,包括鼠标,键盘
  20. 蚂蚁上市招股书:员工持股40%月薪人均5万,直奔财富自由

热门文章

  1. C# 使用NModbus 多Slave站编程方法
  2. 浅谈项目结项后的移交问题
  3. 用Python+Selenium来测试登录自动登录163邮箱
  4. Python基础(简明Python教程)
  5. [Python图像处理] 使用高通滤波器实现同态滤波
  6. Android中创建Surface和TYPE_WALLPAPER类型的window
  7. Oracle 11g R2 Rman备份与恢复(二)
  8. 【电气专业知识问答】问:电力变压器的不正常工作状态和可能发生的故障有哪些?一般应装设哪些保护?
  9. 二寸照片大小是多少?如何修改制作证件照?
  10. 使用Python为图片添加空间相关噪声(相干噪声)