以查询某日的从上海到北京的高铁票为例(此例只查票,不购票,只作为入门级练习案例。)
首先打开12306进行页面分析
在这里插入图片描述

车票的数据,都是动态加载的,动态加载的数据不在网页源码中。可以从Fetch/XHR的Preview中找到。
如图我们可以从中看到我们需要的车票信息。
在这里插入图片描述
要发起请求的url,不一定是上方的url。而是找到目标信息后,该信息对应的url。
从headers中找到该页面的url。经测试,还不足以得到预期的结果,遂再在代码中加上cookie。

import requests


def query():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
        'Cookie': '_uab_collina=163781789801657648754614; JSESSIONID=17D8DC27974BF574F488C751D613020D; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u957F%u6C99%2CCSQ; _jc_save_fromDate=2021-11-29; _jc_save_toDate=2021-11-25; _jc_save_wfdc_flag=dc; RAIL_EXPIRATION=1638084218471; RAIL_DEVICEID=GjoD0SgmuOrn8I5Th6sUW3ladtrYirj_WuUcpoeRWAOdZLc63TmPOpT1z1CkycXEQYSSIJSyipw1YGROKouZDXPDwH5rr_S0Dctws6kdtfdau9QTrufBKnxOwEWaGsS0L8y3sluymB5TlCqIAWN3nNP-jxbLyUgg; BIGipServerpassport=887619850.50215.0000; route=495c805987d0f5c8c84b14f60212447d; BIGipServerotn=2547450122.24610.0000; BIGipServerportal=3067347210.17695.0000'
    }
    url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-11-29&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=CSQ&purpose_codes=ADULT'
    response = requests.get(url, headers=headers)
    # print(response.content.decode('utf-8'))
    # print(response.json()['data']['result'])  
    return response.json()['data']['result']

# 解析数据
for i in query():
    li = i.split('|') 
    if li[32] != '无' and li[32] != '':
        print(f'{li[3]}有票的,{li[32]}')
    else:
        print(f'{li[3]}无票')

代码运行结果如下所示(部分):
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐