webpy 实例 12306余票查询

效果

main.py

# -*- coding: utf-8 -*-
import web
import search

urls = (
    ‘/‘, ‘Search‘,
)

render = web.template.render(‘templates‘)

class Search():
    def GET(self):
        return render.search([])

    def POST(self):
        x = web.input()
        data = search.getInfoByUrl(str(x[‘date‘]),str(x[‘from‘]),str(x[‘to‘]))
        return render.search(data)

app = web.application(urls, globals())

if __name__=="__main__":
    app.run()

search.py

# -*- coding: utf-8 -*-
import urllib
import re
import json

SEARCH_TICKET_URL="https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=%s&from_station=%s&to_station=%s"

def getStationName(chinese):
    stationTable = open("station_name.js").read()
    pattern = re.compile(‘\|‘+chinese+‘\|([A-Z]{3})‘);
    stationCode = pattern.search(stationTable)
    return stationCode.group(1)

def getInfoByUrl(queryDate, fromStation, toStation):
    fromStation = getStationName(fromStation)
    toStation = getStationName(toStation)
    url = SEARCH_TICKET_URL % (queryDate, fromStation, toStation)
    print url
    rawJson = urllib.urlopen(url).read()
    data = json.loads(rawJson)
    return data["data"]["datas"]

#queryDate = ‘2015-01-27‘
#fromStation = ‘成都‘
#toStation = ‘北京‘
#print getInfoByUrl(queryDate,fromStation,toStation)

template/search.html

$def with(trains)
<html>
<head>
<style>
table {
  font-size: 12px;
  text-align: center;
}
.th {
  background-color: #288CCC;
  color: #FFF;
}
</style>
</head>

<body>
<form method="post">
日期 <input type="text" name="date" value="2015-01-27">
出发地 <input type="text" name="from" value="北京">
目的地 <input type="text" name="to" value="成都">
<input type="submit" value="提交">
</form>

<table>
<thead>
<tr class="th">
  <th width="90">车次</th>
  <th width="100"><div class="two-line"><span>出发站</span><br clear="none" /><span>到达站</span></div></th>
  <th width="82"><div class="two-line" id="startendtime"><span>出发时间</span><br clear="none" /><span>到达时间</span></div></th>
  <th width="82"><span class="b2" id="_span_lishi">历时</span></th>
  <th width="49">商务座</th>
  <th width="49">特等座</th>
  <th width="49">一等座</th>
  <th width="49">二等座</th>
  <th width="49">高级<br clear="none" />
  软卧</th>
  <th width="49">软卧</th>
  <th width="49">硬卧</th>
  <th width="49">软座</th>
  <th width="49">硬座</th>
  <th width="49">无座</th>
  <th width="49">其它</th>
  <th class="last">备注</th>
</tr>
</thead>
<tbody id="_query_table_datas"></tbody>

$for train in trains:
  <tr class="" id="$train[‘train_no‘]">
    <td  class="train">
    $train[‘station_train_code‘]
    </td>
    <td class="cdz">
        <strong class="start-t">$train[‘start_station_name‘]</strong><br>
        <strong>$train[‘end_station_name‘]</strong>
    </td>
    <td class="cds">
        <strong class="start-t">$train[‘start_time‘]</strong><br>
        <strong>$train[‘arrive_time‘]</strong>
    </td>
    <td class="ls">
        <strong>$train[‘lishi‘]</strong>
        <span></span>
    </td>
    <td width="49"><span>$train[‘swz_num‘]</span></td>
    <td width="49"><span>$train[‘tz_num‘]</span></td>
    <td width="49"><span>$train[‘zy_num‘]</span></td>
    <td width="49"><span>$train[‘ze_num‘]</span></td>
    <td width="49"><span>$train[‘gg_num‘]</span></td>
    <td width="49"><span>$train[‘rw_num‘]</span></td>
    <td width="49"><span>$train[‘yw_num‘]</span></td>
    <td width="49"><span>$train[‘rz_num‘]</span></td>
    <td width="49"><span>$train[‘yz_num‘]</span></td>
    <td width="49"><span>$train[‘wz_num‘]</span></td>
    <td width="49"><span>$train[‘qt_num‘]</span></td>
  </tr>

</table>

</body>
</html>
时间: 2024-08-04 13:35:30

webpy 实例 12306余票查询的相关文章

android 12306余票查询

android软件 可以查询动车余票 [1].[图片] 1.jpg 跳至 [1] [2] [3] [4] [5] [2].[图片] 2.jpg 跳至 [1] [2] [3] [4] [5] [3].[图片] 3.jpg 跳至 [1] [2] [3] [4] [5] [4].[图片] 4.jpg 跳至 [1] [2] [3] [4] [5] [5].[文件] 12306余票查询.rar ~ 1MB    下载(759) 跳至 [1] [2] [3] [4] [5]

铁路局12306余票查询的实现

离上次写的类似于铁道部12306城市选择框的实现过了都快一个月了,最近一直在忙,在学习sharepoint2013,虽然早就实现了12306的余票查询,但是一直没抽出时间来写,刚好这几天也快放假了,抽点时间写一下,不然都要拖到年后了啊... 先来看一下条件输入窗口: 这里的出发地和目的地是之前提到的城市选择框,加上一个DateTimePicker和一个Button,就做的简陋一点了哈,对界面挑剔的大牛可以绕道,不要伤害我幼小的心灵哟~ 然后我们分析一下12306查询余票的过程: 最直接的就是用c

php 通过API接口连接12306余票查询

<?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>"; //获取API传过来的信息 queryDate 时间 from_station 始发站编号 to_station 到达站编号 $url = "https://kyf

阿里云确认向12306提供了技术协助,负责承接12306网站75%的余票查询流量

公开数据显示,今年春运火车票售卖的最高峰日出现在2014年12月19日.12306网站访问量(PV值)达到破纪录的297亿次,平均每秒PV超过30万次.当天共发售火车票956.4万张,其中互联网发售563.9万张,占比59%,均创历年春运新高.阿里云计算日前予以确认,确实向12306提供了技术协助,负责承接12306网站75%的余票查询流量.至于合作的具体细节,阿里云方面称将适时对外公布. 12306网站曾被认为是“全球最忙碌的网站”,在应对高并发访问处理方面备受网民诟病.经此一役,阿里云计算将

12306余票高效查询--clojure实现

写在前面 参考 https://www.cnblogs.com/guozili/p/6144561.html 由于各地CDN节点Cache更新存在时差,所以批量查询全国12306 CDN节点,找到最快的节点获取购票的必要信息. 该文章主要用户学习使用clojure并发获取网络资源,仅限用于学习. 本篇不涉及具体源码,只记录工具.方法. 主要方法 获取CDN节点 根据摸索,大约有两种方式: 直接使用站长工具->ping测试获取各个地方ping域名,该方式简单粗暴,但是可能不同时间ping获取的IP

抓取12306余票

目的:抓取12306余票随时间的变化规律,推导出12306的放票规则,从而能制定更好的抢票策略. 难点.问题: 准备抓取多少个站点 抓取的日期范围多大 如何储存数据.变量有查询开始站点.查询结束站点.出发日期. 数据分析.上面的数据足够多:比如整个预售期30天,乃至整年的数据,尤其是春运这个高峰期. 可能会遇到12306的反爬虫策略,具体问题到时具体分析.

Python:爬虫助你回家,12306余票监测!

写在前面 一年一度的春运即将来临,各位看官回家的票有没有买好呢?反正小编已经按捺不住激动的心情,开始蠢蠢欲动了.但是作为技术控,就应该有技术控的抢票姿态,鉴于12306逆天的验证码,小编放弃了控制12306自动抢票的骚操作,开始走向自动余票提醒:有余票=>微信推送余票信息的道路.   正文 以徐州到滕州为例,我们想爬取1月26号的余票信息,登录12306官网查询余票页面(https://kyfw.12306.cn/otn/leftTicket/init),在下图所示的红框内输入出发地.目的地以及

python3.7之12306抢票脚本实现

悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研究一下抢票脚本的实现思路,参考:(https://juejin.im/post/5b116504f265da6e0636cbc2 - Python3.6实现12306火车票自动抢票). 在原作者之上,对执行代码做了以下处理: 删除短信/邮件通知功能 删除控制台输入功能 新增登陆cookie的刷新 新

从零实现一款12306抢票软件(一)

https://zhuanlan.zhihu.com/p/37101955 从零实现一款12306抢票软件(一) 张小方 公众号:easyserverdev.资深开发工程师,擅长客户端与高性能服务器的设计与架构. ?关注他 28 人赞了该文章 写在前面的话 每年逢年过节,一票难求读者肯定不陌生.这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票. 关于http请求的格式和如何组装http数据包给服务器发送请求,我