用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>
项目文件下载地址:https://files.cnblogs.com/files/meelo/12306seach.7z
浙公网安备 33010602011771号