今天接触python的第二天,鉴于现在刚好是春运阶段,所以想用python实现12306抢票功能,因为刚接触python,能力有限,所以只根据百度可以查到的教程,做了一个查票功能

1.实现查票功能,就是爬取12306上的余票信息,再在本地进行组织展示

首先打开12306的余票查询界面,分析页面

从上图可以看到,当点击查询功能是所访问的连接,以及响应数据,我们所要做的就是对响应数据进行解析

2.从地址中我们可以看到查票时所需要传递的参数

https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2018-01-16&leftTicketDTO.from_station=VNP&leftTicketDTO.to_station=CDW&purpose_codes=ADULT

leftTicketDTO.train_date为出发日期 leftTicketDTO.from_station为出发地leftTicketDTO.to_station为目的地 purpose_codes=ADULT为成人票

从链接中可以看到 出发地与目的地都为字母,这个是因为12306将所有的地点都做了一个字典存在下面这个js中,可以将地址输入到浏览器上,查看js中内容

https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8964
本人在程序中将以上JS文件中的内容存到了stations.py中

3.开始今天的正文部分,爬取数据,

先根据improt将所需要的插件安装好,然后将所需要的参数准备好:

import stations
from Splider12306 import Splider
#将地点与所对应的字母对应到字典中,我是将
station = {}
for s in stations.station_names.split('@'):if s:tmp = s.split('|')station[tmp[1]] = tmp[2]
# train_date = raw_input("请输入出发时间(格式为2018-01-01) >")
# from_station = station[raw_input("请输入出发城市 >")]
# to_station = station[raw_input("请输入目的城市 >")]
# print from_station+ to_station
splider = Splider()
train_date = '2018-02-11'
from_station = 'JNK'
to_station = 'ZDN'
splider.doCraw(train_date,from_station,to_station,station)

开始爬取数据:本例中利用PrettyTable将解析好的数据已表格形式展现

# coding=utf-8
import requests
import re
import base64from prettytable import PrettyTable
class Splider :def __init__(self):self.headers = {"Accept": "*/*","Accept-Encoding": "gzip, deflate, sdch, br","Accept-Language": "zh-CN,zh;q=0.8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4549.400 QQBrowser/9.7.12900.400"}# stations=r.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)',r.json()["data"]["result"])#用正则表达式 来获取车站的拼音和大小写字母的代号信息
# print stations
# print isinstance(str(r.json()), unicode)
# print r.content.decode('utf-8')def doCraw(self,train_date,from_station,to_station,station) :new_station = {v: k for k, v in station.items()}# print stationself.TicketSession = requests.Session()self.TicketSession.headers = self.headersself.TicketSession.verify = Falseself.query_url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT' %(train_date,from_station,to_station)# r = requests.get(query_url, verify=False)r = self.TicketSession.get(self.query_url)if r.status_code != 200 :print '查询超时,请稍后再试!'return# print r.status_code# with open('json.txt', 'w') as fp:#     fp.write(str(r.json()).decode('utf-8').encode('mbcs'))pt = PrettyTable()header = '车次 出发站 到达站 出发时间 到达时间 时长 一等座 二等座 软卧 硬卧 硬座 无座 预定'.split()pt._set_field_names(header)if 'result' in r.json()["data"]:rj = r.json()["data"]["result"]c = 0d = 0for i in rj:ptrow = []n = i.split('|')# d += 1# for n in i.split('|'):#     # ptrow.append(x["station_train_code"])#     print'[%s] %s' % (c, n)#     c += 1# c = 0# # if d>1:# #     break# print n[6]# print n[7]ptrow.append(n[3])#车次ptrow.append(new_station[n[6]])#出发站ptrow.append(new_station[n[7]])#到达站ptrow.append(n[8])#出发时间ptrow.append(n[9])#到达时间ptrow.append(n[10])#时长ptrow.append(n[31])#一等座ptrow.append(n[30])#二等座ptrow.append(n[23])#软卧ptrow.append(n[26])#硬卧ptrow.append(n[28])#硬座ptrow.append(n[29])#无座ptrow.append(n[1])  # 预定pt.add_row(ptrow)print ptelse:print '这两个站点没有直达列车'

4.结果展示:当控制台出现r.json()报错是,是因为没有查询到数据,只需要再次执行即可

pythyon爬虫实现12306查票相关推荐

  1. 快过年了,Python实现12306查票以及自动购票....

    嗨害大家好鸭!我是小熊猫~ 明天就是2023年啦~ 还有谁像我小熊猫一样没有回家的? 这次康康能不能12306抢票回家!!! Python实现12306查票以及自动购票 [代码来源]: 青灯教育-自游 ...

  2. 用Python实现一个简单好用的12306查票系统

    春节快到了,又要到一年中紧张刺激的时候了! 买票回家! 今天教大家想做一个简单好用的查票系统! 本次用到环境和模块 环境: Python 3.6 Pycharm 模块 requests pandas ...

  3. 基于Python 3.4 实现的12306查票器

    学了一学期Python还是让我感受到这是一门强大的语言,如果能熟练使用许多库的话,它给人带来的方便是非常大的, 很难想象一位Freelancer当初单枪匹马搞出来的语言,如今能发展壮大到这个程度! 本 ...

  4. vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口

    菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...

  5. java实现12306查票_[转]java抓取12306信息实现火车余票查询示例firefox

    最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...

  6. 通过Requst进行12306查票(2022-09-10)

    运行演示: 请输入您要出发的城市:北京 请输入您要去往的城市:上海 请输入您要出发的时间(****-**-**):2022-09-10 +--------------+---------------- ...

  7. Python实现12306查票以及自动抢票

    市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单.下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事. 目录 环境使用 相关模块 思路 ...

  8. 过年回家抢不到火车票?教你用 Python 开发 12306 查票神器

    临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...

  9. python 12306查询不到车次_过年回家抢不到火车票?Python 开发 12306 查票神器

    临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...

  10. python12306抢学生票票下载_过年回家抢不到火车票?教你用 Python 开发 12306 查票神器...

    临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...

最新文章

  1. TVM yolov3优化代码修改(编译运行OK)
  2. 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议
  3. python numpy.r_ 与 numpy.c_的用法
  4. el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
  5. EntityFramework Core 2.0自定义标量函数两种方式
  6. 手机端网站底部悬浮 广告代码 代关闭_网站被劫持,网站被劫持了应该怎么办?怎么解决网站被劫持?...
  7. 046 实例11-自动轨迹绘制
  8. 浅谈SQLiteOpenHelper之onUpgrade例子
  9. Python 中Python 为什么要继承 object 类
  10. 电动牙刷C语言程序,电动牙刷的日常维护
  11. python随机抽取样本1500个_python 随机抽取数据
  12. 计算机组成原理平均cpi怎么算_计算机组成原理-计算机的性能指标及计算题
  13. 全面拆解携程云原生实践,打造智能弹性的云端酒店直连系统
  14. Mil学习之 MimArith 图片逻辑运算
  15. HTML5之帆布(canvas)(一)
  16. 同事辞职了,我一个人做两个人的活,公司又不招人了,该怎么办?
  17. 又开始的python-day10-20200821-文件操作相关内置函数-拷贝-读取-写入
  18. THANK YOU FOR YOUR CONCERN, SIOBAN AND ANTHONY
  19. 如何限流,具体实现有哪些?
  20. 画环形或者蚊香线圈的软件介绍以及使用笔记

热门文章

  1. 阵道计算机,太古神王电脑版
  2. mysql从创库到查询基本命令
  3. 【WiFi】WiFi安全类型
  4. 什么是动态DNS(DDNS)
  5. Use Goldengate Initial Data Load
  6. matlab学霸表白公式,一个理科学霸的表白:数学公式的超酷表白
  7. 计算机有哪些知识,电脑基本操作知识有哪些
  8. Mac Mini - 一个深坑
  9. 磁盘压缩卷只能压缩一半
  10. 乱码原因产生和解决方案