菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但

接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是python,node的资料比较少,而且本身也不会node.js,

没有任何基础,只能看着文档写几个小demo...

nodejs爬取查票接口,获取json数据,由于12306的查票接口返回的数据是经过加密的,所以要再对result进行解析输出

写这个的时候,找了好多,还学了python,准备用pthon爬虫,python里有urllib爬虫很方便,想要用nodejs爬接口数据,

搜了好多,被网上的一些资料给误导了,一直用https和request请求,设置rejectUnauthorized: false忽略证书认证,还有

什么下载证书,读取证书,结果一直爬不到数据,在这里卡了好久,后来在踩了好多坑以及不断尝试的过程中偶然发现其实很简单(菜鸟o(╥﹏╥)o)

安装superagent

npm install superagent --save

js代码

var superagent = require('superagent')
var express = require('express');
var app = express();
var router = express.Router();
var stationobj = require('../models/query');router.post("/", function(req,res,next){  // 前端请求用postvar params = req.bodyvar fromsta = 'BJP';var tosta = 'HZH';var listrpage = params.listrpage?params.listrpage:1;for(let i in stationobj){ // 把车站名解析成三字码fromsta = stationobj[params.FromStation]tosta = stationobj[params.ToStation]}
//获取查询参数
var config = {time:params.FromDate,//日期格式必须是这样from_station:fromsta,//始发站车站代码,这里是北京北end_station:tosta,//车次
};// https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date=2018-10-20&leftTicketDTO.from_station=HZH&leftTicketDTO.to_station=SHH&purpose_codes=ADULT
const url = 'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date='+config.time+'&leftTicketDTO.from_station='+config.from_station+'&leftTicketDTO.to_station='+config.end_station+'&purpose_codes=ADULT'let lists = []superagent.get(url).end(function(response,result){if (result.statusCode==200) {const r = result.bodyconst flag = r.data.flagconst map = r.data.mapconst ress = r.data.resultlet priceParams = {}ress.forEach((item,index)=>{console.log(item.split('|'))let list = {}list.train_id = item.split('|')[2]list.train_no = item.split('|')[3]for(var key in stationobj){if(stationobj[key]===item.split('|')[4]){list.from_station_name = key}if(stationobj[key]===item.split('|')[7]){list.to_station_name = key}}list.start_time = item.split('|')[8]list.arrive_time = item.split('|')[9]list.duration = item.split('|')[10].split(':')[0]+'时'+item.split('|')[10].split(':')[1]+'分'list.if_can_by = item.split('|')[11]list.leave_time = item.split('|')[13]list.seat_type = item.split('|')[15]list.seat_types = item.split('|')[35]list.from_station_no = item.split('|')[16]list.to_station_no = item.split('|')[17]// 普通K:21:软卧、 24:无座  25:  26:硬卧  27:硬座  // 普通T:19:高级软  20:其它  21:软卧  24:无座  26:硬卧  27:硬座// 普通Z:19:高级软  21:软卧  24:无座  26:硬卧  27:硬座// 普通Y:22:软座   24:无座  27:硬座// 高铁G:23:特等   24:无座  28:二等  29:一等  30:商务// 城际C:23:特等   24:无座  28:二等  29:一等  30:商务 // 动车D:21:软卧   24:无座  28:二等  29:一等  31:动卧 if(list.train_no.substr(0,1)=='K'||list.train_no.substr(0,1)=='T'||list.train_no.substr(0,1)=='Z'){list.zc0 = '软卧'list.zc1 = '硬卧'list.zc2 = '硬座'list.zc3 = '无座'list.num0 = item[23]?'有票':'无票'list.num1 = item[28]?'有票':'无票'list.num2 = item[29]?'有票':'无票'list.num3 = item[26]?'有票':'无票'
                }if(list.train_no.substr(0,1)=='Y'){list.zc0 = '软座'list.zc1 = '硬座'list.zc2 = '无座'list.zc3 = ''list.num0 = item[24]?'有票':'无票'list.num1 = item[29]?'有票':'无票'list.num2 = item[26]?'有票':'无票'list.num3 = ''}if(list.train_no.substr(0,1)=='D'){list.zc0 = '一等座'list.zc1 = '二等座'list.zc2 = '无座'list.zc3 = ''list.num0 = item[31]?'有票':'无票'list.num1 = item[30]?'有票':'无票'list.num2 = item[26]?'有票':'无票'list.num3 = ''}if(list.train_no.substr(0,1)=='G'||list.train_no.substr(0,1)=='C'){list.zc0 = '商务座'list.zc1 = '一等座'list.zc2 = '二等座'list.zc3 = '无座'list.num0 = item[32] || item[25]?'有票':'无票'list.num1 = item[31]?'有票':'无票'list.num2 = item[30]?'有票':'无票'list.num3 = item[26]?'有票':'无票'}lists.push(list)})
              res.json({status:true,msg:'查询成功',data: lists});} else {res.json({status:false,msg:'查询失败',data:{}});}})});module.exports = router;

获取到原始数据,对原始数据还要进行解析,需要获取车站对应信息的json数据,然后对应读取,res.json接口输出

更多代码详情戳 https://github.com/leitingting08/train 更新中,这里为了方便,nodejs服务端代码和前端代码写在同一个项目里,

要启动项目的话先npm install 安装依赖,进入到前端项目命令行运行npm start打开localhost:8088端口查看,如果想查看接口运行

server目录下的文件 node server/bin/www 打开localhost:3000端口查看,localhost:3000/query是查票接口,先这样,前进一小步,后面持续完善...

转载于:https://www.cnblogs.com/leiting/p/9594292.html

vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口相关推荐

  1. 【全栈项目上线(vue+node+mongodb)】06.nodejs服务上线(生产环境前后分离的vue项目中怎么解决跨域问题)...

    以下操作使用下面项目为案例 https://github.com/itguide/vnshop ## 启动node服务 克隆好项目后记得把依赖包安装好 npm i 使用 node 启动node服务 c ...

  2. vue+node+mongodb 搭建一个完整博客

    Vue + Node + Mongodb 开发一个完整博客流程 前言 前段时间刚把自己的个人网站写完, 于是这段时间因为事情不是太多,便整理了一下,写了个简易版的博客系统 服务端用的是 koa2框架 ...

  3. vue+node+mongodb实现的功能

    用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上, 地址是: https://github.com/GainLoss/vue-node-mongodb https ...

  4. Vchat — 从头到脚,撸一个社交聊天系统(vue + node + mongodb)

    前言 项目开始是因为工作需要一个聊天室功能,但是因为某些原因最终选用的是基于xmpp协议的Strophe.js写的.于是就想用node自己写一套,本来只是想简单的写个聊天页面,但是写完了又不满意,所以 ...

  5. 仿美团外卖的全栈项目(vue+node+mongodb)带支付-大三求实习

    关于 2019届大三学生,前段时间一直想一个人单独开发一个较为完整的项目,在众多应用中,考虑之后选择了美团外卖来模仿,这段时间就利用课余时间进行开发,前端用vue+vuex+vue-router+ax ...

  6. 一个 Vue + Node + MongoDB 博客系统

    源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...

  7. 【全栈项目上线(vue+node+mongodb)】04. 怎么在一台主机上面部署多个网站,详细操作指南...

    怎么在一台主机上面部署多个网站 使用Nginx的虚拟化配置 环境 使用一键安装lnmp环境 请参考 https://segmentfault.com/a/11... 第一步:执行 lnmp vhost ...

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

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

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

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

最新文章

  1. Spring Boot 整合Redis 实现缓存
  2. xcode:关于Other Linker Flags
  3. 预告片:裸指关节SOA
  4. php __FILE__和$_SERVER['SCRIPT_FILENAME']区别
  5. 快速集成iOS基于RTMP的视频推流
  6. python inspect —— 查看类的继承体系
  7. iphone在jsp显示时间会NAN解决办法
  8. csdn插件下载和应用
  9. OpenWrt 防火墙组件
  10. 实用的图片批量压缩优化工具
  11. 网吧服务器怎么加无线路由器,网吧路由器怎么设置 网吧路由器设置方法【详细步骤】...
  12. 数据分析研究思维导图
  13. 邮件营销整体解决方案
  14. Java设计模式6,依赖倒置原则
  15. 《佛密诸事》第七章:释逸牟尼四十九禅修录(节录十日)
  16. UI设计趋势中的新拟物化图标设计素材模板
  17. shell基础之04
  18. Spring Boot 拦截器无效,不起作用
  19. 常用色卡和read.table参数详解
  20. 友声电子秤手机app_友声TM-xA条码秤数据管理软件V2.53D

热门文章

  1. redis将散裂中某个值自增_Redis中hash表中的field的value自增可以用hincrby
  2. 蒲公英 洛谷 - 4168
  3. 纯css3火箭穿越太空动画js特效
  4. 数据库|数据排序和分组
  5. Goby新一代网络安全工具
  6. sqlmap进阶—参数讲解
  7. 顺丰同城急送联合浣洗布局社区近场服务 助力传统干洗店数字化转型升级
  8. wps设置根据单元格值设置一整行颜色
  9. linux软链接重启,linux 软连接与硬链接
  10. Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”