功能介绍:输入起点、终点、时间就能得到携程上的航班信息

代码:

from prettytable import PrettyTable
import requests
import jsondef xiecheng(dcity,acity,date):date = date[0:4]+'-'+date[4:6]+'-'+date[6:8]headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36","Content-Type": "application/json",# 声明文本类型为 json 格式# "referer": r"https://flights.ctrip.com/itinerary/oneway/hak-khn?date=2018-11-11"}city = {'阿尔山': 'YIE', '阿克苏': 'AKU', '阿拉善右旗': 'RHT', '阿拉善左旗': 'AXF', '阿勒泰': 'AAT', '阿里': 'NGQ', '澳门': 'MFM', '安庆': 'AQG', '安顺': 'AVA', '鞍山': 'AOG', '巴彦淖尔': 'RLK', '百色': 'AEB', '包头': 'BAV', '保山': 'BSD', '北海': 'BHY', '北京': 'BJS', '白城': 'DBC', '白山': 'NBS', '毕节': 'BFJ', '博乐': 'BPL', '重庆': 'CKG', '昌都': 'BPX', '常德': 'CGD', '常州': 'CZX', '朝阳': 'CHG', '成都': 'CTU', '池州': 'JUH', '赤峰': 'CIF', '揭阳': 'SWA', '长春': 'CGQ', '长沙': 'CSX', '长治': 'CIH', '承德': 'CDE', '沧源': 'CWJ', '达县': 'DAX', '大理': 'DLU', '大连': 'DLC', '大庆': 'DQA', '大同': 'DAT', '丹东': 'DDG', '稻城': 'DCY', '东营': 'DOY', '敦煌': 'DNH', '芒市': 'LUM', '额济纳旗': 'EJN', '鄂尔多斯': 'DSN', '恩施': 'ENH', '二连浩特': 'ERL', '佛山': 'FUO', '福州': 'FOC', '抚远': 'FYJ', '阜阳': 'FUG', '赣州': 'KOW', '格尔木': 'GOQ', '固原': 'GYU','广元': 'GYS', '广州': 'CAN', '贵阳': 'KWE', '桂林': 'KWL', '哈尔滨': 'HRB', '哈密': 'HMI', '海口': 'HAK', '海拉尔': 'HLD', '邯郸': 'HDG', '汉中': 'HZG', '杭州': 'HGH', '合肥': 'HFE', '和田': 'HTN', '黑河': 'HEK', '呼和浩特': 'HET', '淮安': 'HIA', '怀化': 'HJJ', '黄山': 'TXN', '惠州': 'HUZ', '鸡西': 'JXA', '济南': 'TNA', '济宁': 'JNG', '加格达奇': 'JGD', '佳木斯': 'JMU', '嘉峪关': 'JGN', '金昌': 'JIC', '金门': 'KNH', '锦州': 'JNZ', '嘉义': 'CYI', '西双版纳': 'JHG', '建三江': 'JSJ', '晋江': 'JJN','井冈山': 'JGS', '景德镇': 'JDZ', '九江': 'JIU', '九寨沟': 'JZH', '喀什': 'KHG', '凯里': 'KJH', '康定': 'KGT', '克拉玛依': 'KRY', '库车': 'KCA', '库尔勒': 'KRL', '昆明': 'KMG', '拉萨': 'LXA', '兰州': 'LHW', '黎平': 'HZH', '丽江': 'LJG', '荔波': 'LLB', '连云港': 'LYG', '六盘水': 'LPF', '临汾': 'LFQ', '林芝': 'LZY', '临沧': 'LNJ', '临沂': 'LYI', '柳州': 'LZH', '泸州': 'LZO', '洛阳': 'LYA', '吕梁': 'LLV', '澜沧': 'JMJ', '龙岩': 'LCX', '满洲里': 'NZH', '梅州': 'MXZ', '绵阳': 'MIG', '漠河': 'OHE', '牡丹江': 'MDG', '马祖': 'MFK', '南昌': 'KHN', '南充': 'NAO', '南京': 'NKG', '南宁': 'NNG', '南通': 'NTG', '南阳': 'NNY', '宁波': 'NGB', '宁蒗': 'NLH', '攀枝花': 'PZI', '普洱': 'SYM', '齐齐哈尔': 'NDG', '黔江': 'JIQ', '且末': 'IQM', '秦皇岛': 'BPE','青岛': 'TAO', '庆阳': 'IQN', '衢州': 'JUZ', '日喀则': 'RKZ', '日照': 'RIZ', '三亚': 'SYX', '厦门': 'XMN', '上海': 'SHA', '深圳': 'SZX', '神农架': 'HPG', '沈阳': 'SHE', '石家庄': 'SJW', '塔城': 'TCG', '台州': 'HYN', '太原': 'TYN', '扬州': 'YTY','唐山': 'TVS', '腾冲': 'TCZ', '天津': 'TSN', '天水': 'THQ', '通辽': 'TGO', '铜仁': 'TEN', '吐鲁番': 'TLQ', '万州': 'WXN','威海': 'WEH', '潍坊': 'WEF', '温州': 'WNZ', '文山': 'WNH', '乌海': 'WUA', '乌兰浩特': 'HLH', '乌鲁木齐': 'URC', '无锡': 'WUX','梧州': 'WUZ', '武汉': 'WUH', '武夷山': 'WUS', '西安': 'SIA', '西昌': 'XIC', '西宁': 'XNN', '锡林浩特': 'XIL', '香格里拉(迪庆)': 'DIG','襄阳': 'XFN', '兴义': 'ACX', '徐州': 'XUZ', '香港': 'HKG', '烟台': 'YNT', '延安': 'ENY', '延吉': 'YNJ', '盐城': 'YNZ', '伊春': 'LDS','伊宁': 'YIN', '宜宾': 'YBP', '宜昌': 'YIH', '宜春': 'YIC', '义乌': 'YIW', '银川': 'INC', '永州': 'LLF', '榆林': 'UYN', '玉树': 'YUS', '运城': 'YCU', '湛江': 'ZHA', '张家界': 'DYG', '张家口': 'ZQZ', '张掖': 'YZY', '昭通': 'ZAT', '郑州': 'CGO', '中卫': 'ZHY', '舟山': 'HSN', '珠海': 'ZUH', '遵义(茅台)': 'WMT', '遵义(新舟)': 'ZYI'}url = 'http://flights.ctrip.com/itinerary/api/12808/products'request_payload = {"flightWay":"Oneway","classType":"ALL","hasChild":'false',"hasBaby":'false',"searchIndex":1,"token":"088874eb2e9e0d33ce1e2106e89303e2", # 修改加入 token"airportParams":[{"dcity":city.get(dcity).lower(),"acity":city.get(acity).lower(),"dcityname":dcity,"acityname":acity,"date":date}]}# 这里传进去的参数必须为 json 格式response = requests.post(url,data=json.dumps(request_payload),headers=headers).textrouteList = json.loads(response).get('data').get('routeList')table=PrettyTable(["Airline","FlightNumber","DepartureDate",'ArrivalDate','PunctualityRate','LowestPrice'])if routeList:for route in routeList:info = {}legs = route.get('legs')[0]flight = legs.get('flight')info['Airline'] = flight.get('airlineName') info['FlightNumber'] = flight.get('flightNumber')info['DepartureDate'] = flight.get('departureDate')[-8:-3]info['ArrivalDate'] = flight.get('arrivalDate')[-8:-3]info['PunctualityRate'] = flight.get('punctualityRate')info['LowestPrice'] = legs.get('characteristic').get('lowestPrice')table.add_row(info.values())print(dcity,'------->',acity,date)print(table)   else:print('失败')if __name__ == "__main__":dcity = input('请输入起点: ')acity = input('请输入终点: ')date = input('请输入出行日期: ')xiecheng(dcity,acity,date)

注释:

  • 访问的链接为 post 请求,发现传递的参数类型不是Form Data,而是Request Payload。百度查到一篇文章得到解释,这个类型需要传入的是 json 格式的参数,且需要在 headers 里面声明,才能正常的传递参数访问链接。
  • 传入的时间参数应该是 8 位数的时间格式。
  • 这里没有对传入的地点和时间进行判断,所以输入的地点应该在 city 字典中,且时间不早于当前日期。
  • 核对爬出来的数据都与网页上的一样,但不排除后期携程在里面投毒的可能性,比如去哪儿网。

关于 Request Payload 参考文章:

python爬虫如何POST request payload形式的请求

爬取结果:

爬虫 — 爬取携程的航班信息相关推荐

  1. python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存

    目的:爬取携程网址 火车 中的单程与中转 单程 url="https://trains.ctrip.com/trainbooking/search?tocn=%25e5%258d%2583% ...

  2. python爬取携程旅游评价信息词云图分析

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

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

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

  4. python爬携程景区评论_python爬取携程景点评论信息

    python爬取携程景点评论信息 今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为P ...

  5. JAVA爬虫爬取携程酒店数据selenium实现

    在爬取携程的时候碰到很多的壁垒,接下来分析所有过程 1.根据以往经验最初想到用jsoup去解析每个HTML元素,然后拿到酒店数据,然后发现解析HTML根本拿不到id为hotel_list的div,所以 ...

  6. python携程酒店评论_Python基于selenium爬取携程酒店评论信息

    爬取站点 任意一个携程酒店的详细链接,这里给出了四个,准备开四个线程爬取: https://hotels.ctrip.com/hotel/6278770.html#ctm_ref=hod_hp_hot ...

  7. python爬虫爬取携程国际机票航班信息,返回json串

    # -*- coding: utf-8 -*- import requests, json import hashlib import re# 此处的参数是json 出发三字码,达到三字码,出发时间, ...

  8. 用python爬网站评论_python爬取携程景点评论信息

    今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为POST,还需要你提取的哪一页,下面 ...

  9. python爬取携程景点_python爬取携程景点评论信息

    今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为POST,还需要你提取的哪一页,下面 ...

最新文章

  1. sql2005 Agent XPs 选项释义
  2. 数据库:悲观锁与乐观锁
  3. python文件夹目录_Python 操作文件、文件夹、目录大全
  4. 2021年中国痤疮皮肤护理市场趋势报告、技术动态创新及2027年市场预测
  5. 机器学习笔记【二】逻辑回归与分类(2):感知机学习算法与逻辑回归的区别,牛顿方法
  6. c语言修改注册表函数,用C语言实现修改注册表
  7. 2020届秋招中兴笔试题
  8. emc re 整改 超标_EMC电磁兼容RE辐射超标整改策略
  9. bzoj 3197: [Sdoi2013]assassin 树哈希+树形dp+费用流
  10. erp框架 saas_Saas模式ERP系统
  11. 循环优化与多面体模型
  12. 0x00007FFEB46D3F57 (mfc140ud.dll)处(位于*.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000
  13. P背景软件测试,软件测试的背景和发展
  14. Edge上的gmail网页改为纯文字模式后改不回标准模式(HTML Gmail)问题和解决方法
  15. python打印日志方法的使用
  16. yy账号找回方法详解
  17. 熟悉的人不认识我了,不熟悉的人认识我了
  18. 系统定制开发,微商来----专业做分销商城
  19. 知识蒸馏(Distillation)
  20. 【密码学/信息安全】#3 古典密码(含代码)

热门文章

  1. C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型
  2. 【Python】random.randint()用法
  3. 二叉搜索树:红黑树的原理和实现
  4. 解决qq安全防护更新进程总提示的方法
  5. 四年级计算机走进传统节日教案,四年级走进中国传统节日的作文范文
  6. audio: /dev/dsp: No such file or directory madplay
  7. 深入浅出ES6:模板字符串(`和‘)
  8. 防泄密-工业自动化控制行业源代码防泄密以及技术文档防泄密解决方案
  9. 指针类型和指向的数据类型
  10. windows10禁止自动更新