我们先看一下携程网的信息

从以上我们可以获取两个信息

1、我是从上海到成都的

2、7条航班信息

教你如何爬虫

我不教静态网页的爬虫,因为太简单了;我们直接上手携程网

我们到这个上述这个页面以后,我推荐用谷歌浏览器,方便;

1、谷歌浏览器

2、携程网显示机票信息页面

3、f12

4、然后我们刷新页面,network下就有很多的文件了

选择XHR,然后出现以下几条信息

点击其中一条,然后点击右侧的preview

我们可以看到里面有数据,不一定是第一条,我们查看里面的数据有没有我们要的信息

举个例子,其中的pageData,我们点击,然后发现previewer里面的数据很少,根本没有一条是我们需要的;所以肯定不是pageData这个文件

 其实是第一条product

 现在已经有眉目了,我们需要这个product文件的信息,点击Headers

从上面我们可以知道我们爬虫的地址是url = 'http://flights.ctrip.com/itinerary/api/12808/products'

这个请求是post请求;那么我们需要发送什么样的数据才会有这样的结果呢?

废话不多说,直接贴上代码

爬虫携程网

from prettytable import PrettyTable
import requests
import json
import pymysql
def xiecheng(dcity, acity, date):date = date[0:4] + '-' + date[4:6] + '-' + date[6:8]headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0","Content-Type": "application/json",  # 声明文本类型为 json 格式"referer": r"https://flights.ctrip.com/itinerary/oneway/SHA-TAO?date=2020-04-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,"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).get('data').get('routeList')#循环这个数据集合print(routeList)for route in routeList:if len(route.get('legs')) == 1:info = {}legs = route.get('legs')[0]flight = legs.get('flight')airlineName= flight.get('airlineName')# companyflightNumber= flight.get('flightNumber')# companyidairportName=flight.get('departureAirportInfo').get('airportName')#portnamedepartureDate=flight.get('departureDate')#starttimearrivalDate=flight.get('arrivalDate')#endtimepunctualityRate= flight.get('punctualityRate')#rate#pricecabins = legs.get('cabins')[0].get('price')price= cabins.get('price')#存储到数据库中print("路线:",airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,price)print(dcity, '------->', acity, date)
if __name__ == "__main__":dcity ="上海"acity ="青岛"date ="20200411"xiecheng(dcity, acity, date)

效果如下

一模一样;

现在我们将这些信息存储数据库里面

效果如下图所示

我用的是mysql数据库,如果是其他的,可以百度一下连接代码,基本上差不多

from prettytable import PrettyTable
import requests
import json
import pymysql
def create():db = pymysql.connect("localhost", "root", "123456", "app")  # 连接数据库cursor = db.cursor()cursor.execute("DROP TABLE IF EXISTS LINE")sql = """CREATE TABLE LINE (ID INT PRIMARY KEY AUTO_INCREMENT,airlineName CHAR(255),flightNumber CHAR(255),airportName CHAR(255),departureDate CHAR(255),arrivalDate CHAR(255),punctualityRate CHAR(255),price  CHAR(255))"""cursor.execute(sql)db.close()def insert(value):db = pymysql.connect("localhost", "root", "123456", "app")cursor = db.cursor()sql = "INSERT INTO LINE(airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,price) VALUES (%s,%s,%s,%s,%s,%s,%s)"try:cursor.execute(sql, value)db.commit()print('插入数据成功')except:db.rollback()print("插入数据失败")db.close()def xiecheng(dcity, acity, date):date = date[0:4] + '-' + date[4:6] + '-' + date[6:8]headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0","Content-Type": "application/json",  # 声明文本类型为 json 格式"referer": r"https://flights.ctrip.com/itinerary/oneway/SHA-TAO?date=2020-04-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,"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).get('data').get('routeList')#循环这个数据集合print(routeList)for route in routeList:if len(route.get('legs')) == 1:info = {}legs = route.get('legs')[0]flight = legs.get('flight')airlineName= flight.get('airlineName')# companyflightNumber= flight.get('flightNumber')# companyidairportName=flight.get('departureAirportInfo').get('airportName')#portnamedepartureDate=flight.get('departureDate')#starttimearrivalDate=flight.get('arrivalDate')#endtimepunctualityRate= flight.get('punctualityRate')#rate#pricecabins = legs.get('cabins')[0].get('price')price= cabins.get('price')#存储到数据库中value=[airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,price]insert(value)print("路线:",airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,price)print(dcity, '------->', acity, date)
if __name__ == "__main__":dcity ="上海"acity ="青岛"date ="20200411"#创建数据库create()xiecheng(dcity, acity, date)

python爬取携程网航班机票信息并存储到数据库中,2020年最新版本相关推荐

  1. Python爬取金山词霸每日一句,存储到MySQL中

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/3 20:25 # @Author : baoshan # @Site : ...

  2. python爬取携程机票并发送过滤后的机票信息到指定邮箱

    0x0 前言 在疫情发生之前,在知乎上刷到一个回答,说是用服务器实现一个自动爬取机票并将过滤后的机票信息发送到自己的邮箱中,感觉十分有趣.由于疫情原因无法返校,加上家和学校相隔接近3000公里,再加上 ...

  3. Python爬取携程机票代码实例

    Python爬取携程机票代码实例 现在携程的页面是通过接口传递数据的,不能直接使用xpath进行解析,需要模拟调用接口的步骤 dcity是指出发地的城市编码 acity是指目的地的城市编码 其他参数是 ...

  4. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  5. Python爬取安居客经纪人信息

    Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...

  6. Python爬取药监局化妆品管理信息发现的问题

    Python爬取药监局化妆品管理信息 **1.json格式本质上是字符串!!! 今天在爬取国家药监局化妆品管理信息的时候,发现"json数据本质上是字符串",以前我还以为json本 ...

  7. Python 爬取拉勾招聘信息

    Python 爬取拉勾招聘信息 故事背景 最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼 ...

  8. python爬取音乐并保存_python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中

    爬取TOP500的音乐信息,包括排名情况.歌曲名.歌曲时间. 网页版酷狗不能手动翻页进行下一步的浏览,仔细观察第一页的URL: 这里尝试将1改为2,再进行浏览,恰好是第二页的信息,再改为3,恰好是第三 ...

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

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

最新文章

  1. Angular async pipe在Component html模板中的一个实际应用
  2. ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构
  3. hm编码工具使用_HM集团旗下最高端品牌ARKET将进驻中国,带你看看真正的“北欧风”...
  4. 注意力机制可视化_Attention isn’t all you need!BERT的力量之源远不止注意力
  5. mobaxterm下载与使用mobaxterm远程登录Linux
  6. DBUtils的概述
  7. Flex中ItemRenderer项目渲染器的两个重要问题
  8. 翻身的废鱼——论PHP从入门到放弃需要多久?18
  9. 研发团队建设几点看法及建议
  10. 无线桥接正在获取ip问题,设置静态后又无法连接互联网,并且就算连接成功了也速度慢
  11. 2022最详细最快微信聊天记录备份&导出方案
  12. wrk 服务器性能HTTP压测工具
  13. QT 科学计算器与谷歌拼音输入法实现
  14. 猫咪APP 服务器不稳定,这下知道猫咪为啥经常情绪不稳定了不?
  15. 自定义Dialog去除白色背景 + Dialog其他用法
  16. 计算机用户与权限如何设置密码,如何设置电脑用户权限_如何设置电脑使用时间...
  17. (附源码)基于java的校园二手书籍交易平台 毕业设计131558
  18. PXE高效批量网络装机
  19. arduino串口绘图_Arduino IDE开发环境串口绘图仪(Serial Plotter)使用方法简介
  20. led数码显示控制plc实验_实验三 LED数码显示控制 PLC实验报告

热门文章

  1. Python简笔画——用Turtle库画一只《穿红靴子的小鸭》
  2. php curl返回body,获取CURL中返回的body内容
  3. eos代码阅读笔记09- 石墨烯架构Graphene
  4. 斐讯音箱控制扫地机器人_斐讯扫地机器人app
  5. 【NAACL 2021】RCI:在基于 Transformer 的表格问答中行和列语义捕获
  6. 从 电影《飞驰人生》中想到
  7. 大块的写作时间?这个时代,它是奢侈品
  8. python爬虫十二:初步使用Scrapy框架爬取数据
  9. 基于Jeecgboot前后端分离的流程管理平台演示系统安装(二)
  10. 多重背包问题和“二进制拆分”