用python3爬取12306余票信息

## 用python3爬取12306余票信息

先引用这个库里的车次对应信息https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971
为此先写一个.py文件,命名为stationsInfo.py

import re,requests
 
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971'
response = requests.get(url, verify=False)
stations = re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)
station_codes=dict(stations)
station_names=dict(zip(station_codes.values(),station_codes.keys()))

然后这里重头戏,

from tabulate import tabulate
import requests,re,datetime,time,json,datetime
from tkinter import*
from tkinter import messagebox
from stationsInfo import station_codes,station_names
from colorama import init,Fore,Back,Style

def query():
    date=input("请输入日期(格式xxxx-xx-xx):\n")
    from_station=station_codes[input("请输入起始站:\n")]
    to_station=station_codes[input("请输入目地站:\n")]
    url="https://kyfw.12306.cn/otn/leftTicket/query?"
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400"
        }
    #time=entry_time.get()
    #start=entry_start.get()
    #end=entry_end.get()
    url=url+'leftTicketDTO.train_date='+date+'&leftTicketDTO.from_station='+from_station+'&leftTicketDTO.to_station='+to_station+'&purpose_codes=ADULT'
    #print(url)
    #html=getHtmltext(url,headers)
    #showTicket(html)
    requests.packages.urllib3.disable_warnings()
    r = requests.get(url,verify=False).json()
    yupiao = r['data']['result']

    table_header = ['车次','始发站','到达站','始发时间','到站时间','历时','商务特等座','一等座','二等座','高级软卧','软卧','动卧','硬卧','软座','硬座','无座']  #表格头

    table_data = []  #数据添加至列表,作为表格的主体内容

    for i in yupiao:
        a = i.split('|')           #分割字符串,a是个列表
        is_null = a[0]             #判断是否有票
        train_code = a[3]          #车次
        from_station = station_names[a[6]]     #始发站城市代码并转换
        to_station = station_names[a[7]]       #到达站城市代码并转换
        start_time = a[8]          #出发时间
        end_time = a[9]            #到达时间
        total_time = a[10]         #总共历时
        shangwutedeng = a[32]      #商务特等座
        yideng = a[31]             #一等座
        erdeng = a[30]             #二等座
        gaojiruanwo = a[21]        #高级软卧
        ruanwo = a[23]             #软卧
        dongwo = a[33]             #动卧
        yingwo = a[28]             #硬卧
        ruanzuo = a[24]            #软座
        yingzuo = a[29]            #硬座
        wuzuo = a[26]              #无座
        #添加到元组
        yupiao_tuple = (train_code,from_station,to_station,start_time,end_time,total_time,shangwutedeng,yideng,erdeng,gaojiruanwo,ruanwo,dongwo,yingwo,ruanzuo,yingzuo,wuzuo)#余票元组
        table_data.append(yupiao_tuple)
    print(tabulate(table_data,headers=table_header,tablefmt='grid'))
query()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值