_’’’
    cookie反反爬
    案例:查12306车票信息
    需求:查长沙-上海各车次车票数量

    页面分析:
    数据:静态加载,动态加载
    1.url = https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2022-03-25&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
    2:请求方式是: get
    ‘’’
    上代码:_

    1. import requests
    2. import json
    3. url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2022-03-25&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CQW&purpose_codes=ADULT'
    4. headers = {
    5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
    6. 'Cookie': '_uab_collina=164813514567909479612501; JSESSIONID=B92C2713D07E7942DC4746A2DAE84F50; highContrastMode=defaltMode; guidesStatus=off; cursorStatus=off; RAIL_EXPIRATION=1648423265081; RAIL_DEVICEID=OwYpKee2YthiEUIIudKf7GoLFzK0y1kKyafYRzsaz0A-Mr18jMf8q7cilELEmRfbv9pBtTh63sUbZKhA7goitXCV1WBBkA7mhYjhMCT-YbSAdEGP7ovrGAe53vs_w3MKHMz8kCLTkCr1CVlPT2lADgc8K05ZGf8W; _jc_save_fromStation=%u6210%u90FD%2CCDW; BIGipServerpassport=887619850.50215.0000; route=6f50b51faa11b987e576cdb301e545c4; BIGipServerotn=1641611530.24610.0000; _jc_save_fromDate=2022-03-25; _jc_save_toDate=2022-03-25; _jc_save_wfdc_flag=dc; _jc_save_toStation=%u91CD%u5E86%2CCQW'
    7. }
    8. res = requests.get(url, headers=headers)
    9. res.encoding = 'utf-8'
    10. dic = res.text
    11. #出来的dic格式为str,要用json转换成dic
    12. dic = json.loads(res.text)
    13. data = dic['data']['result']
    14. print('经过成都到重庆的列车有:')
    15. for i in data:
    16. #num = 0 #在这里加入一个num赋值为0,是真的很巧妙,作用就是跟列表res里的各项组合排列(看下面的循环)
    17. res= i.split('|')
    18. #print(result)
    19. print(f'车次为{res[3]},二等票为{res[30]},一等座票为{res[31]},商务座为{res[32]}')
    20. #for j in res:
    21. #print(num,j)
    22. #num +=1

    总结:
    这一次对全国著名的12306下手,真的感受到了12306的强大,可以说它几乎每秒钟都在更新…好,废话不多说.
    1)首先对12306网页分析,查看原代码,查找一个唯一的东西(如其中一车次:G8613,没有找到一处,证明网站数据是动态的.
    2)跟着打开发者工具(按F12)点击Network,再刷新,再点XHR哪一项,好消息,只有一项,明确数据是动态的了,终于找到了URL(https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2022-03-25&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CQW&purpose_codes=ADULT)
    3)加上UA可以请求了,出来了,乱码 ==>加代码:res.encoding = ‘utf-8’
    4)打印结果,12306的强大体现了,网页不知转到哪里去了,分析,可能是cookie没加上
    5)加上cookie之后,好,真家伙来了(requests已经把结果转为dict了)开始剥洋葱…
    6)经过两重剥皮后得到一列表:data = dic[‘data’][‘result’],在此有一很巧妙,作用就是跟列表res里的各项组合排列(看下面的循环):

    1. num = 0
    2. for j in res:
    3. print(num,j)
    4. num +=1

    7)这样就很清楚了,终于找到了有用的资料(res[3]:车次 res[30]:二等票 res[31]一等票 res[32]商务票)可以打印了
    8)打印结果: print(f’车次为{res[3]},二等票为{res[30]},一等座票为{res[31]},商务座为{res[32]}’)
    541fbd72aa8a6e6c0b0e11c2c75e8ef.pnge7067d09f928be7ae7b9e7a91a911e1.png