1.前言

本实例需要用到的python包有requests、PrettyTable(用于打印展示成表格形式)

pip install requests
pip install prettytable

2.实例代码:

from prettytable import PrettyTable
import requests
import jsondef flyapi(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 格式,'Cookie': '_ga=GA1.2.1422723313.1585102199; _abtest_userid=1c296dde-d639-424f-a007-cad9975fd8d5; _gac_UA-3748357-1=1.1585220211.Cj0KCQjwpfHzBRCiARIsAHHzyZooiSyIMjmJ_FcCpRlSJuF8h1guzQ2LWkDVHs9kewmqkaawfORabUwaAtx5EALw_wcB; _RSG=Hv4Xpi9jTt51tuATq36Hm8; _RDG=28329d014ec74124741c6df88a04cc43e6; _RGUID=5dddb49b-3384-4e51-8c11-183d1d2b8dc1; _gcl_aw=GCL.1585220214.Cj0KCQjwpfHzBRCiARIsAHHzyZooiSyIMjmJ_FcCpRlSJuF8h1guzQ2LWkDVHs9kewmqkaawfORabUwaAtx5EALw_wcB; _gcl_dc=GCL.1585220214.Cj0KCQjwpfHzBRCiARIsAHHzyZooiSyIMjmJ_FcCpRlSJuF8h1guzQ2LWkDVHs9kewmqkaawfORabUwaAtx5EALw_wcB; MKT_CKID=1585220215050.q49s4.k99w; GUID=09031038111353360416; _abtest_userid=19bf1f22-d393-4415-a4c6-66ef5a7a952d; _RF1=163.125.73.52; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; Union=AllianceID=4897&SID=130026&OUID=&createtime=1589199056&Expires=1589803855549; MKT_CKID_LMT=1589199055579; _gid=GA1.2.1657496412.1589199056; MKT_Pagesource=PC; FD_SearchHistorty={"type":"S","data":"S%24%u5929%u6D25%28TSN%29%24TSN%242020-05-11%24%u6DF1%u5733%28SZX%29%24SZX%24%24%24"}; _gat=1; _jzqco=%7C%7C%7C%7C%7C1.1408634404.1585220215042.1589199055588.1589199119649.1589199055588.1589199119649.0.0.0.9.9; __zpspc=9.4.1589199055.1589199119.2%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _bfa=1.1585102198351.9o303i.1.1586776655945.1589199052742.5.13.214073; _bfs=1.4; _bfi=p1%3D10320673302%26p2%3D10320673302%26v1%3D13%26v2%3D12'}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 = 'https://flights.ctrip.com/itinerary/api/12808/products'request_payload = {"flightWay": "Oneway","army": "false","classType": "ALL","hasChild": 'false',"hasBaby": 'false',"searchIndex": 1,"token": "c91cf603fd7191a9c762fcc27b4cbf29","airportParams": [{"dcity": city.get(dcity), "acity": city.get(acity), "dcityname": dcity, "acityname": acity, "date": date}]}# 这里传进去的参数必须为 json 格式response = requests.post(url, data=json.dumps(request_payload), headers=headers).textrouteList = json.loads(response)["data"].get('routeList')table = PrettyTable(["航空公司", "航班", "起飞时间-->到达时间", "准点率", "最低价格"])table.padding_width = 1if routeList is None:print("\n=========未查询到航班数据!============")returnfor route in routeList:if len(route.get('legs')) == 1:info = {}legs = route.get('legs')[0]flight = legs.get('flight')if flight.get("sharedFlightNumber") is not None and flight.get("sharedFlightNumber").strip() != '':info['Airline'] = flight.get('airlineName') + "(共享)"else:info['Airline'] = flight.get('airlineName')info['FlightNumber'] = flight.get('flightNumber')info['Date'] = flight.get('departureDate')[-8:-3] + "--" + flight.get('arrivalDate')[-8:-3]info['PunctualityRate'] = flight.get('punctualityRate')info['Price'] = legs.get('characteristic').get('lowestPrice')table.add_row(list(info.values()))print(dcity, '------->', acity, date)print(table)if __name__ == "__main__":dcity = input('请输入起点: ')acity = input('请输入终点: ')date = input('请输入出行日期: ')# dcity = '天津'# acity = '深圳'# date = '20190928'flyapi(dcity, acity, date)

3.细节讲解

header和 request_payload 中内容可以通过浏览器访问携程官网后的F12调试页面进行获取,进入后选择Network,选择XHR,选中products(查阅资料发现这个是机票信息的api:https://flights.ctrip.com/itinerary/api/12808/products,但是不能直接通过网址在浏览器中进行访问,所以要模拟请求),如下图:

4.运行结果

如果需要其他信息可以打印routeList变量,然后分析改写代码

使用requests爬取携程网飞机票价格实例相关推荐

  1. 爬取携程网机票价格并提供搜索功能

    要爬取的数据是最近一段时间的飞机航班的最低价,并提供搜索功能. 利用谷歌浏览器的检查来获取最近一段时间飞机航班最低价json数据的url. 打开之后: 注意这里我们并不能用json模块将数据转换为js ...

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

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

  3. Python3 爬取携程网[2]: 爬取北京五星级酒店详细信息

    目录 1. 需求分析 2. 实验环境 3. 具体实现 3.1 分析页面 3.2 请求 3.3 响应 3.3.1 BeautifulSoup提取标签信息 3.3.2 正则表达式提取字符串信息 3.3.3 ...

  4. Python网络爬虫实战:爬取携程网酒店评价信息

    这个爬虫是在一个小老弟的委托之下写的. 他需要爬取携程网上的酒店的评价数据,来做一些分词和统计方面的分析,然后来找我帮忙. 爬这个网站的时候也遇到了一些有意思的小麻烦,正好整理一下拿出来跟大家分享一下 ...

  5. python爬取微博恶评_python爬取微博评论的实例讲解

    python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无论是python新入手的小白,还是已经 ...

  6. 使用python爬取携程网旅游信息(包含景点、酒店、美食)

    其中本次爬虫的主要思想是:首先是找到携程网url的编写规律,然后根据规律使用beautifulsoup4对所需的html语言中的信息提取,最后就是封装处理.爬取的信息只是用来本次毕设的研究非商业用途. ...

  7. Python网络爬虫爬取携程网中的游记标题及内容

    最近在自学Python爬虫,会自己练习一些网站然后记录下来供大家参考,如有不对之处希望大佬多多指正 此处以爬取携程网上带有"非遗"关键词的游记为例: 首先找到需要爬取的网站的url ...

  8. python爬取天气存入excel_python爬取内容存入Excel实例

    最近老师布置了个作业,爬取豆瓣top250的电影信息.按照套路,自然是先去看看源代码了,一看,基本的信息竟然都有,心想这可省事多了.简单分析了下源代码,标记出所需信息的所在标签,ok,开始干活! 鉴于 ...

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

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

  10. python requests 爬取数据

    python requests 爬取数据 import requests from lxml import etree import time import pymysql import json h ...

最新文章

  1. Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了
  2. 判断文件或文件夹(目录)是否存在 C/C++ win/linux通用
  3. Xamarin XAML语言教程基本页面ContentPage占用面积内容页面的派生关系与属性
  4. VTK:IO之ReadRectilinearGrid
  5. 【ARM】在Uboot中运行第一个汇编程序
  6. 10月11 小结: 你又贪玩了不是?
  7. Spring Cloud学习笔记---Spring Cloud Sleuth--一个手动搭建zipkin碰到的坑
  8. java背包算法_背包算法java版
  9. [MFC] 手动美化 MFC 窗体
  10. 腾讯WebQQ 3.0 密码、验证码加密算法分析
  11. 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践
  12. Appium的工作原理终于搞清楚了
  13. 没想到一个起点中文网都可以掀起这么大的波澜
  14. 警惕nmn 智商税,nmn抗衰老 骗局,另有隐情
  15. 双十一淘宝美妆消费数据分析
  16. 认识自我,还需吾日三省吾身
  17. Signal Processing投稿经历
  18. python怎么另存为_python如何IE另存为附件
  19. 第六届山东省赛总结贴
  20. 《管理学》第九章 沟通

热门文章

  1. 2012服务器清理系统盘,windows2012磁盘清理
  2. c/c++文本单词查询
  3. win8计算机图标快捷键,Win8电脑关机快捷键图标设置方法
  4. Flutter 旋转动画 — RotationTransition
  5. java设计模式三个模式结合_Java设计模式——责任链(结合Tomcat中Filter机制)
  6. word论文排版操作
  7. Unity Shader 绘制朱利亚集合 Julia 奇幻图形
  8. 研发 | Unity资源商店里的免费资源,你一定要知道!
  9. 龙门飞甲的一点小小感想
  10. 搜狗浏览器安装第三方插件