pythyon爬虫实现12306查票
今天接触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查票相关推荐
- 快过年了,Python实现12306查票以及自动购票....
嗨害大家好鸭!我是小熊猫~ 明天就是2023年啦~ 还有谁像我小熊猫一样没有回家的? 这次康康能不能12306抢票回家!!! Python实现12306查票以及自动购票 [代码来源]: 青灯教育-自游 ...
- 用Python实现一个简单好用的12306查票系统
春节快到了,又要到一年中紧张刺激的时候了! 买票回家! 今天教大家想做一个简单好用的查票系统! 本次用到环境和模块 环境: Python 3.6 Pycharm 模块 requests pandas ...
- 基于Python 3.4 实现的12306查票器
学了一学期Python还是让我感受到这是一门强大的语言,如果能熟练使用许多库的话,它给人带来的方便是非常大的, 很难想象一位Freelancer当初单枪匹马搞出来的语言,如今能发展壮大到这个程度! 本 ...
- vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口
菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...
- java实现12306查票_[转]java抓取12306信息实现火车余票查询示例firefox
最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...
- 通过Requst进行12306查票(2022-09-10)
运行演示: 请输入您要出发的城市:北京 请输入您要去往的城市:上海 请输入您要出发的时间(****-**-**):2022-09-10 +--------------+---------------- ...
- Python实现12306查票以及自动抢票
市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单.下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事. 目录 环境使用 相关模块 思路 ...
- 过年回家抢不到火车票?教你用 Python 开发 12306 查票神器
临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...
- python 12306查询不到车次_过年回家抢不到火车票?Python 开发 12306 查票神器
临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...
- python12306抢学生票票下载_过年回家抢不到火车票?教你用 Python 开发 12306 查票神器...
临近年关,不少在外的游子都急着买票回家,但这时候的火车票,总是供不应求的. 我想到了几年前徐峥主演的<人在囧途>,春运期间,一个老板,一个民工,同时都因为买不到火车票而囧态百出,甚至辗转到 ...
最新文章
- TVM yolov3优化代码修改(编译运行OK)
- 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议
- python numpy.r_ 与 numpy.c_的用法
- el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
- EntityFramework Core 2.0自定义标量函数两种方式
- 手机端网站底部悬浮 广告代码 代关闭_网站被劫持,网站被劫持了应该怎么办?怎么解决网站被劫持?...
- 046 实例11-自动轨迹绘制
- 浅谈SQLiteOpenHelper之onUpgrade例子
- Python 中Python 为什么要继承 object 类
- 电动牙刷C语言程序,电动牙刷的日常维护
- python随机抽取样本1500个_python 随机抽取数据
- 计算机组成原理平均cpi怎么算_计算机组成原理-计算机的性能指标及计算题
- 全面拆解携程云原生实践,打造智能弹性的云端酒店直连系统
- Mil学习之 MimArith 图片逻辑运算
- HTML5之帆布(canvas)(一)
- 同事辞职了,我一个人做两个人的活,公司又不招人了,该怎么办?
- 又开始的python-day10-20200821-文件操作相关内置函数-拷贝-读取-写入
- THANK YOU FOR YOUR CONCERN, SIOBAN AND ANTHONY
- 如何限流,具体实现有哪些?
- 画环形或者蚊香线圈的软件介绍以及使用笔记