使用python在途牛旅游网站根据传入的出发地,目的地,舱等,舱位,乘客信息,完成自动机票生单

本文介绍了如何利用Python编程,结合requests库,从途牛旅游网站抓取并处理数据,根据输入的出发地、目的地、舱位等信息,自动完成机票预订生单流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -!- coding: utf-8 -!-
import requests
import json
import re
import time

def get_flight(parameter):
    # {"success": false, "msg": "很抱歉,您访问的太快了,休息一下吧,或者登录您的途牛帐号继续访问。", "errorCode": 179991, "atd": null, "data": null}

    parameter = json.loads(parameter)
    dep_code = parameter['dep_code']
    arr_code = parameter['arr_code']
    fromDate = parameter['fromDate']
    urls = '{"systemId":52,"pollTag":0,"channelCount":0,"adultQuantity":1,"childQuantity":0,"babyQuantity":0,"supportBlack":true,"segmentList":[{"dCityIataCode":"BJS","aCityIataCode":"SHA","departDate":"2019-09-01"}],"rph":0,"hackersFlightNos":null}'
    urls_dict = json.loads(urls)
    urls_dict['segmentList'][0]['dCityIataCode'] = dep_code
    urls_dict['segmentList'][0]['aCityIataCode'] = arr_code
    urls_dict['segmentList'][0]['departDate'] = fromDate
    urls = json.dumps(urls_dict)
    url = 'https://flight-api.tuniu.com/wzt/flight/v1/listFlight?data=' + urls + '&_=1566269494525'

    headers = {
   
        'Sec-Fetch-Mode': "no-cors",
        'Referer': "http://flight.tuniu.com/domestic/list/BJS_SHA_ST_1_0_0/?start=2019-09-01",
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
        'Accept': "*/*",
        'Cache-Control': "no-cache",
        'Host': "flight-api.tuniu.com",
        'Cookie': "OLBSESSID=s467csiveuugroeca6n412lcr4; isLogined=true; p_phone_400=4007-999-999; p_phone_level=0; p_global_phone=%2B0086-25-8685-9999; tuniuuser_citycode=MjAw",
        'Accept-Encoding': "gzip, deflate",
        'Connection': "keep-alive",
        'cache-control': "no-cache"
    }

    response = requests.request("GET", url, headers=headers, verify=False).json()
    # if response["msg"] == "很抱歉,您访问的太快了,休息一下吧,或者登录您的途牛帐号继续访问。":
    try:

        query_id = response["data"]["queryId"]

    except:
        response = requests.request("GET", url, headers=headers, verify=False).json()
        query_id = response["data"]["queryId"]

    # print(query_id)
    return query_id


def get_vendorid(queryId, parameter):
    parameter = json.loads(parameter)
    urls = '{"queryId":"Y2l0eUtleXM9QkpTLVNIQSxkZXBhcnR1cmVEYXRlPTIwMTktMDktMDEsZGVwYXJ0dXJlRGF0ZXM9MCxwYXNzZW5nZXJRdWFudGl0eT0xIzAjMCMwLHBoeXNpY2FsQ2FiaW49bnVsbA==","systemId":52,"flightNos":"HU7603"}'
    urls_dict = json.loads(urls)
    urls_dict['queryId'] = queryId
    urls_dict["flightNos"] = parameter['data']["routing"]["fromSegments"][0]["flightNumber"]
    urls = json.dumps(urls_dict)
    url = 'https://flight-api.tuniu.com/wzt/flight/v2/multiCabinDetails?' + urls + '&_=1566268642667'

    headers = {
   
        'Sec-Fetch-Mode': "no-cors",
        'Referer': "http://flight.tuniu.com/domestic/list/NKG_CGO_ST_1_0_0/?start=2019-08-21",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
        'Accept': "*/*",
        'Cache-Control': "no-cache",
        'Postman-Token': "532e624f-0549-484c-bad8-091da95edb05,8aaccc88-bf02-43e4-ace3-bddae140cd87",
        'Host': "flight-api.tuniu.com",
        'Cookie': "tuniu_partner=MTAxLDAsLDlmZDgyZThjYTZkNGMwMTlmZTUyNzdlYjJmNTcxYzQ1",
        'Accept-Encoding': "gzip, deflate",
        'Connection': "keep-alive",
        'cache-control': "no-cache"
    }

    response = requests.request("GET", url, headers=headers, verify=False).json()
    # print(2)
    # print(json.dumps(response))

    return response


# 在上一步之后写一个函数,来判断具体的仓位,获取相应的价格等等信息
def get_price(parameter, vebdorId):
    parameter = json.loads(parameter)
    cabinPrices = vebdorId["data"]["productCategorys"][0]["cabinPrices"]
    # print(cabinPrices)
    cobinList = []
    for cabinPice in cabinPrices:
        # print(cabinPice)
        if cabinPice["priceJourneyCabinList"][0]["priceFlightCabinList"][0]["cabinCode"] == \
                parameter["data"]["routing"]["fromSegments"][0]["cabin"] \
                and cabinPice["priceJourneyCabinList"][0]["priceFlightCabinList"][0]["cabinClass"] == \
                parameter["data"]["routing"]["fromSegments"][0]["cabinGrade"]:
                cobinList.append(cabinPice)


                return cobinList[0]
        else:
            return {
   "aduDivideBaby": "未查询到相应座位"}


def check_price(parameter, queryId, vebdorId, cobin):
    url = "https://flight-api.tuniu.com/wzt/flight/check/v1/checkPrice"
    # print(json.dumps(cobin))
    parameter = json.loads(parameter)
    payload = '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值