python爬虫:爬取携程航班数据

最近在学爬虫,用携程的航班数据练手,顺便记录一下,话不多说下面开始:

一、首先来观察一下携程网的航班信息的网页:


这是一个携程网站的截图,观察可知这是一个动态的网页;别问咋观察的,问就是百度
OK下面我们:
1、f12检查源代码
2、选择network
3、选择XHR

这个products中存放了当前页面的所有信息哦!至于说咋知道是它的吗,最快的方法就是百度,当然也可以选择自己去猜,打开preview看看代码里有没有我们想要的信息

这里就当已经知道是它了,然后我们点击这个products:

观察它的头部(headers)信息,Request URL这个是我们访问到它的url需要,然后发现是post请求,那是不是要传参呢,继续向下看:

看请求头(Request Headers)这里:user-agent这没啥好说的给它一个ua,这个可以写也可以不写,content-type 这个是声明数据类型,这个是我们需要写的!其他的也可以写但是没必要。

下面这些是post请求要传的的参数了,这里我们以深圳-成都的航班为例,毕竟你要告诉网页你要去哪里。

然后我们预览一下数据:发现是json数据格式

然后我们找一下数据在哪:

我们点开routeList列表的第0项,然后点开legs列表,看到flight,当然是点开它,然后就看到了航班信息,我们已经找到了数据。

好了,到这里就差不多对携程的航班信息网页有了一个了解:
1、首先是post
2、数据格式是json
3.然后航班数据在routeList中

二、代码实现

下面上代码:
1、导入用到的模块

import requests ##这里用requests模块
from fake_useragent import UserAgent ##这个是有各大浏览器user-gengt的模块
import json

2、下面准备,头部信息(headers)和参数(request_payload)。cookie过长咱也不会换行就这样看吧!其实也可以不传cookie,这里本人就传了演示一下


url="https://flights.ctrip.com/itinerary/api/12808/products"
headers={'User-Agent':UserAgent().chrome,##谷歌浏览器的ua"Content-Type": "application/json"##声明传入的参数是json类型}
request_payload = {"flightWay": "Oneway","army": "false","classType": "ALL","hasChild": 'false',"hasBaby": 'false',"searchIndex": 1,"portingToken": "3fec6a5a249a44faba1f245e61e2af88","airportParams": [{"dcity": "SZX", "acity": "CTU", "dcityname":"深圳" , "acityname": "成都","date": "2020-06-27"'''这里的城市名称和三字码还有日期是可以改的,你也可以将他封装成参数,到时给它传参就会返回不同始发地到目的地不同日期的航班信息。'''}]}

3、下面发送post请求,这里要注意请求头中声明了文本格式为json,所以我们要将post请求传入的参数转化为json。

response=requests.post(url,headers=headers,data=json.dumps(request_payload)) ##发送post请求

4、将得到的响应文本转成json对应的python格式*(这里是字典)*

data=json.loads(response.text)["data"]##将json字符串转成字典,并选择data关键字后面的值,它还是一个字典

5、我们已经得到了一个包含6月27号深圳到成都的所有航班的字典data,接下来按照我们在网页上找到数据的步骤,找到第一个航班的数据:

flight0=data.get("routeList")[0].get("legs")[0].get("flight")
##通过关键字一步步往下找,可以借助刚才在网页找数据的步骤,或者借助json在线解析网站,这里不在赘述。

6.到这里我们已经得到了包含第一个航班信息的字典flight0,接下来当然根据自己的需要挑选数据了,这里简单选择几个数据演示一下:

flight_no=flight0.get("flightNumber") ##航班号
plane_type=flight0.get("craftTypeName") ##机型
departuredate=flight0.get("departureDate") ##出发时间
arrivaldate=flight0.get("arrivalDate") ##到达时间
print(flight_no,'---',plane_type,'---',departuredate,'---',arrivaldate)##打印一下

结果:

CZ3621 --- 空客321 --- 2020-06-27 06:30:00 --- 2020-06-27 08:55:00

这里是提取的第一航班的数据那如果想把深圳-成都所有航班信息输入呢,当然是循环就ok:

datalist=data.get("routeList") ##获取routeList列表
for num in range(len(datalist)):flight=datalist[num].get("legs")[0].get("flight")##找到航班信息flight_no=flight.get("flightNumber") ##航班号plane_type=flight.get("craftTypeName") ##机型departuredate=flight.get("departureDate") ##出发时间arrivaldate=flight.get("arrivalDate") ##到达时间print(flight_no,'---',plane_type,'---',departuredate,'---',arrivaldate)print('-------------------------------------------------------------------')

结果:(有点多这里截选一部分)

CZ3621 --- 空客321 --- 2020-06-27 06:30:00 --- 2020-06-27 08:55:00
-------------------------------------------------------------------
CZ3457 --- 空客330 --- 2020-06-27 07:00:00 --- 2020-06-27 09:35:00
-------------------------------------------------------------------
8L7741 --- 空客330 --- 2020-06-27 07:45:00 --- 2020-06-27 10:30:00
-------------------------------------------------------------------
Y87741 --- 空客330 --- 2020-06-27 07:45:00 --- 2020-06-27 10:30:00
-------------------------------------------------------------------
HU7741 --- 空客330 --- 2020-06-27 07:45:00 --- 2020-06-27 10:30:00
-------------------------------------------------------------------
CA4330 --- 空客319 --- 2020-06-27 08:00:00 --- 2020-06-27 10:45:00

如果想提取不同始发地到目的地不同日期的航班信息呢,那就将前面的过程封装成一个方法,向里面传参就可以了,话不多说上代码:


#coding=utf-8
import requests
from fake_useragent import UserAgent
import json
city={'深圳':'SZX','无锡':'WUX'}##定义一个存放城市和对应三字码的字典,这里就随便写两个城市
url='https://flights.ctrip.com/itinerary/api/12808/products'
headers={'User-Agent':UserAgent().chrome,"Content-Type": "application/json" }
def pachong(dcity,acity,date):request_payload = {"flightWay": "Oneway","army": "false","classType": "ALL","hasChild": 'false',"hasBaby": 'false',"searchIndex": 1,"portingToken": "3fec6a5a249a44faba1f245e61e2af88","airportParams": [{"dcity": city.get(dcity),"acity": city.get(acity),"dcityname":dcity , "acityname": acity,"date": date}]}##这里是需要传入的参数response=requests.post(url,headers=headers,data=json.dumps(request_payload))#发送post请求data=json.loads(response.text)['data']datalist=data.get("routeList") ##得到存放所有航班信息的列表for num in range(len(datalist)):##遍历所有航班flight=datalist[num].get("legs")[0].get("flight")##找到航班信息flight_no=flight.get("flightNumber") ##航班号plane_type=flight.get("craftTypeName") ##机型departuredate=flight.get("departureDate") ##出发时间arrivaldate=flight.get("arrivalDate") ##到达时间print(flight_no,'---',plane_type,'---',departuredate,'---',arrivaldate)##打印结果print('-------------------------------------------------------------------')if __name__=='__main__':pachong('深圳','无锡','2020-06-28')

结果:结果:(有点多这里截选一部分)

ZH9801 --- 波音737 --- 2020-06-28 07:30:00 --- 2020-06-28 09:50:00
-------------------------------------------------------------------
CA3587 --- 波音737 --- 2020-06-28 07:30:00 --- 2020-06-28 09:50:00
-------------------------------------------------------------------
KY9201 --- 波音737 --- 2020-06-28 07:30:00 --- 2020-06-28 09:50:00
-------------------------------------------------------------------
SC9801 --- 波音737 --- 2020-06-28 07:30:00 --- 2020-06-28 09:50:00
-------------------------------------------------------------------
CA3589 --- 波音737 --- 2020-06-28 09:40:00 --- 2020-06-28 12:10:00
-------------------------------------------------------------------
KY9203 --- 波音737 --- 2020-06-28 09:40:00 --- 2020-06-28 12:10:00
-------------------------------------------------------------------
SC9803 --- 波音737 --- 2020-06-28 09:40:00 --- 2020-06-28 12:10:00
-------------------------------------------------------------------
ZH9803 --- 波音737 --- 2020-06-28 09:40:00 --- 2020-06-28 12:10:00
-------------------------------------------------------------------
CA3591 --- 波音737 --- 2020-06-28 10:40:00 --- 2020-06-28 13:10:00
-------------------------------------------------------------------
KY9805 --- 波音737 --- 2020-06-28 10:40:00 --- 2020-06-28 13:10:00
-------------------------------------------------------------------
SC9805 --- 波音737 --- 2020-06-28 10:40:00 --- 2020-06-28 13:10:00
-------------------------------------------------------------------
ZH9805 --- 波音737 --- 2020-06-28 10:40:00 --- 2020-06-28 13:10:00

以上就是爬取携程航班信息的过程。

python爬虫:爬取携程航班数据相关推荐

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

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

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

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

  3. Java数据爬取——爬取携程酒店数据(二)

    在上篇文章Java数据爬取--爬取携程酒店数据(一)爬取所有地区后,继续根据地区数据爬取酒店数据 1.首先思考怎样根据地域获取地域酒店信息,那么我们看一下携程上是怎样获得的. 还是打开http://h ...

  4. Java数据爬取——爬取携程酒店数据(一)

    最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下 1.根据城市名称来分类酒店数据,所以先找了所有城市的名称 在这个网页上有http://hotels.ctrip.com/domestic- ...

  5. python 爬虫爬取统计局北京统计数据

    python 爬虫爬取统计局统计数据 写在前面 主要因为朋友写论文,要爬取北京的经济数据.拜托我写一个爬虫爬取数据.爬取的都是公开的数据,代码仅供学习使用,切勿用作非法. http://tjj.bei ...

  6. python 携程_python爬取携程和蚂蜂窝的景点评论数据\python爬取携程评论数据\python旅游网站评论数...

    本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言 为 ...

  7. 爬虫 — 爬取携程的航班信息

    功能介绍:输入起点.终点.时间就能得到携程上的航班信息 代码: from prettytable import PrettyTable import requests import jsondef x ...

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

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

  9. 爬虫第六课:爬取携程酒店数据

    首先打开携程所有北京的酒店http://hotels.ctrip.com/hotel/beijing1 简简单单,源代码中包含我们需要的酒店数据,你以为这样就结束了?携程的这些数据这么廉价地就给我们得 ...

  10. python中scrapy可以爬取多少数据_python中scrapy框架爬取携程景点数据

    ------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:https://blog.csdn.net/sdksdk0/article/de ...

最新文章

  1. ffmpeg源码分析:transcode_init()函数
  2. linux网络掉线频繁怎么设置,ubuntu频繁掉线
  3. petalinux2020.1使用注意
  4. Python Module — WSME
  5. php 根据权重随机数,PHP根据概率产生随机数
  6. DM8168 系统编译、启动、烧写
  7. 学python分析双色球_我通过使用Python分析了80多个工作拒绝而学到的东西
  8. android8.0于与ios,android 8.0 oreo抄袭苹果吗 android oreo和ios 11对比
  9. 修改驱动器重定向显示格式
  10. c# winForm使用Aspose.Cells读取CSV文件中文乱码问题
  11. 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
  12. 无视硬件检测直接运行Win10混合现实门户
  13. 根据经纬度查询两点距离(sql)
  14. 计算机网络体系结构中协议和服务的差别,第3章 计算机网络体系结构及协议 -4-2...
  15. Python之数据加密与解密及相关操作(hashlib、hmac、random、base64、pycrypto)
  16. 威斯康星大学-深度学习和生成模型导论2021
  17. RTK模块性能测试分析对比-GNSS实测- RTK板卡100赫兹延迟实测及分析
  18. 服务器主板显示不了独立显卡,独立显卡故障——如何才知道显卡和主板不兼容...
  19. Pta题目集: 电话聊天狂人 (25 分)
  20. hello.java 运行的整个流程

热门文章

  1. appium工作原理
  2. 二、appium的原理
  3. YUV格式讲解并使用ffmpeg生产YUV文件
  4. 基于cmake的交叉编译工具链
  5. 八大排序算法—源代码(c语言)
  6. C/C++二路归并排序
  7. 计算机科学与ICT技术书籍、资料推荐
  8. 九大ICT企业年中业绩大比拼
  9. 昂达平板不能开机刷机_平板电脑不开机怎么刷机?昂达平板电脑刷机步骤
  10. linux免费私人云盘软件,Appnode+kodexplorer免费搭建私有云盘