携程网 机票

1.前言

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

pip install requests

pip install prettytable

2.实例代码:

from prettytable import PrettyTable

import requests

import json

def 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': '__DAYU_PP=fbffA7JMjfFQYEJvq3yV285fa84ef3bb; _abtest_userid=14f10ca5-5fe5-4b90-8994-a9a2a8289725; _ga=GA1.2.1823657567.1547218198; _RSG=jB4_phNRhw9fNvhoLy8_29; _RDG=28f1ebd8af073928c800c3c3726b485bce; _RGUID=9eab6d7a-f3fc-42ed-90bf-23c572af95e9; _geoinfo=CN%26%e6%b7%b1%e5%9c%b3; _bfa=1.1547218195619.296wjo.1.1547625090247.1554179025352.5.60; _bfs=1.1; Hm_lvt_cdce8cda34e84469b1c8015204129522=1554179026; Hm_lpvt_cdce8cda34e84469b1c8015204129522=1554179026; gad_city=31f35a60e938dff697ddea628b5bea7c; _RF1=14.153.237.134; session=SmartLinkCode=U155952&SmartLinkKeyword=&SmartLinkQuary=&SmartLinkHost=&SmartLinkLanguage=zh; _gid=GA1.2.1875696831.1554179028; _gat=1; Mkt_UnionRecord=%5B%7B%22aid%22%3A%224897%22%2C%22timestamp%22%3A1554179028552%7D%5D; _jzqco=%7C%7C%7C%7C1547625095764%7C1.1997966906.1547218199380.1547636825575.1554179028593.1547636825575.1554179028593.0.0.0.59.59; __zpspc=9.5.1554179028.1554179028.1%232%7Csp0.baidu.com%7C%7C%7C%25E6%2590%25BA%25E7%25A8%258B%7C%23; MKT_Pagesource=PC; Union=OUID=index&AllianceID=4897&SID=155952&SourceID=&expires=1554783828996; MKT_orderClick=ASID=4897155952&CT=1554179029004&CURL=https%3A%2F%2Fwww.ctrip.com%2F%3Fsid%3D155952%26allianceid%3D4897%26ouid%3Dindex&VAL={"pc_vid":"1547218195619.296wjo"}; _bfi=p1%3D100101991%26p2%3D100101991%26v1%3D60%26v2%3D59'

}

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,

"portingToken": "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).text

routeList = json.loads(response)["data"].get('routeList')

table = PrettyTable(["航空公司", "航班", "起飞时间-->到达时间", "准点率", "最低价格"])

table.padding_width = 1

for 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变量,然后分析改写代码

文章最后发布于: 2019-09-16 22:34:38

相关阅读

抓取去哪儿网机票数据

此次,我们使用webdriver测试抓取去哪儿网机票数据,为什么不爬取主站而爬取 m站,因为主站机票价格通过css操

爬取网页的图片,选择需要的图片类别

爬百度图片

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import os

import re

import ur

使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。这个时候我们就可以使用代理服务器。 (使用代理服务器去爬

1.0版本中,并未对验证码进行处理,在遇到验证码问题时,提示等待并手工解决import requests

from lxml import etree

import pandas as

爬虫的爬取过程为,从服务器获得网页数据,通过python的相关解析库进行数据的提取分析。过程如下,其中对遇到的问题进行汇总记录解答!

python爬取携程旅游_「携程网 机票」使用requests爬取携程网飞机票价格实例 - seo实验室...相关推荐

  1. python requests 400错误_「http 400」http请求报400错误的原因分析 - seo实验室

    http 400 http 400 错误 - 请求无效 (Bad request) 在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效 ...

  2. ctf入门题库_「ctf比赛」web安全CTF比赛习题(初级) - seo实验室

    ctf比赛 一.Robot 访问URL,可以看到一张骚气十足的图片,然后就什么都没了...没了... 不可能啊,一张骚图片就想欺骗小编,想的太美(长得丑了) 题目说明写的是robot,想想多半是有猫腻 ...

  3. 普通计算机怎么算根号_「根号计算器」12、计算机如何实现开根号? - seo实验室...

    根号计算器 如何求一个数字的算术平方根(又叫开根号,或者开方)? 大家普遍都是用计算器直接计算的,对于程序员来说,就是调用sqrt()方法.但是其内部又是怎么实现的呢? 方法一:迭代法 学过计算方法的 ...

  4. excel导入mysql实验_「excel数据库」将excel表导入数据库的方法步骤 - seo实验室

    excel数据库 在excel中录入好数据以后,可能会有导入数据库的需求,这个时候就需要利用一些技巧导入.接下来是seo实验室小编为大家带来的如何将excel表导入数据库的方法,希望对你有用. 将ex ...

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

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

  6. python 爬取携程旅游景点评论

    python爬取携程旅游景点评论 爬取网址:https://you.ctrip.com/ 爬取评论全部代码 import requests import json import re import t ...

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

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

  8. 利用selenium爬取携程旅游网的景区评论

    第一步:打开携程网,获取该景点的网址.以我的为例,我爬取的是湖北省 恩施州的恩施大峡谷景区的评论.网址为:https://you.ctrip.com/sight/enshi487/51386.html ...

  9. python爬虫获取携程旅游景点评分和评论

    写在前面:酒店和旅游景点方式不同,不能用我的写法,如果获取酒店数据请参考:https://blog.csdn.net/qq_34774456/article/details/89885296 旅游景点 ...

  10. jq select 修改选中_「jquery select」jquery操作select(取值,设置选中) - seo实验室

    jquery select 最近工作中总出现select 和 option问题,整理一下,内容大部分源于网络资料 一.基础取值问题 例如 1.设置value为pxx的项选中 $(".sele ...

最新文章

  1. java异常处理好习惯
  2. JQuery动态执行javascript代码的方法
  3. Keil forc51安装教程
  4. android 读取sd卡中string.xml,android,从SD卡读取xml文件中的值
  5. 同余定理在算法求解中的应用
  6. 05 - Django应用第二步
  7. python类中的特殊方法_Python中类的初始化特殊方法
  8. Java多线程问题之同步器CyclicBarrier
  9. PMP/高项 项目立项管理
  10. 利用MATLAB对乐曲进行钢琴演奏【matlab调音_1】
  11. RabbitMQ(二)
  12. 米家app扫描不到石头机器人_石头扫地机器人T7评测:能驾驭豪宅的高端旗舰?...
  13. 【集训DAY3】挖金矿【二分答案】
  14. Teamviewer Install
  15. Cortex-A8处理器编程(上)
  16. 关于北大中文系应用语言学(上):更多有趣的汉语语法现象
  17. 弗洛伊德与他的精神分析学
  18. 为什么大家都不喜欢用国产科研仪器?
  19. C#流程控制————分支结构
  20. 第五人格共研服务器维护中,第五人格共研服更新公告 角色调整内容详解

热门文章

  1. 微信小程序 免密代扣
  2. 北京世园会率先启用5G技术 中国馆优雅呈现
  3. 全“芯”赋能,SOM3568核心板
  4. 如何设置无线网络中计算机的ip,无线网络设置方法【详细步骤】
  5. flash player所有版本下载地址
  6. 优启通制作系统u盘_如何用优启通制作U盘启动盘
  7. python解析excel公式_读取Excel单元格值,而不是计算它的公式-openpyx
  8. 计算机硬盘密码,电脑常识之--如何给移动硬盘[硬盘]加密码
  9. y的花式写法_y的花式写法_26个字母的花式写法,总有一个你喜欢哒
  10. 77GHz毫米波雷达快速chirp信号技术(五):CAPON Beamforming