Python爬取12306车次信息代码详解


Posted in Python onAugust 12, 2020

详情查看下面的代码:

如果被识别就要添加一个cookie如果没有被识别的话就要一个user—agent就好了。如果出现乱码就设置编码格式为utf-8

#静态的数据一般在elements中(复制文字到sources按ctrl+f搜索。找到的为静态),而动态去network中去寻找相关的信息
import requests
import re
def send_request():
  headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
        ,'Cookie':'_uab_collina=159618052151589201474313; JSESSIONID=D33C89D8BEC6A692C79CFA69FC0B0D29; BIGipServerotn=233832970.24610.0000; BIGipServerpool_passport=216859146.50215.0000; RAIL_EXPIRATION=1596443951465; RAIL_DEVICEID=nMo94O2Z21cXLblW7otLoxUZ_LP9Q01PYj_I89OqU6MqjxyX9814Jc3CH5TNwgBVJqnBaBG8OGiBWo2QtNcu5wVu-asNk6YLa49g0fMwVp03XFJQ-GkhHYHcqIgUd-nqQB_VEdWH1Om_D2yAgIu8QcEavt02pmH5; route=c5c62a339e7744272a54643b3be5bf64; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u5929%u6D25%2CTJP; _jc_save_fromDate=2020-07-31; _jc_save_toDate=2020-07-31; _jc_save_wfdc_flag=dc'}#创建头部信息
  url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-07-31&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=TJP&purpose_codes=ADULT'
  #设置编码格式。防止乱码
  resp=requests.get(url,headers=headers)
  resp.encoding='utf-8'
  return resp

#解析数据
#{}是字典。根据key获取值。
def parse_json(resp,city):
  json_ticket=resp.json()#将相应的数据转换为json
  data_list=json_ticket['data']['result']#得到车次的列表
  lst=[]#列表
  for item in data_list:
    #遍历车次信息进行分割
    d=item.split('|')
    lst.append([d[3],city[d[6]],city[d[7]],d[31],d[30],d[13]])
  return lst
'''
d[3]从列表中获取索引为3的表示车次
d[6]查询起始站
d[7]查询到达站
d[31]一等座
d[30]表示二等座
d[13]表示出行时间'''
#获得station_name的信息
def get_city():
  url='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9151'
  headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
  resp=requests.get(url,headers=headers)
  resp.encoding='utf-8'
  #进行数据的提取(只要一部分)
  stations=re.findall('([\u4e00-\u9fa5]+)\|([A-Z]+)',resp.text)
  #将列表进行转换为字典
  stations_data=dict(stations)
  #key与value进行互换
  station_d={}#空字典。用于完成上述操作
  for item in stations_data:
    station_d[stations_data[item]]=item
  #print(station_d)
  return station_d

def start():
  lst=parse_json(send_request(),get_city())
  #进行数据的筛选(得到有效的数据)
  for i in lst:
    if i[3]!='无' and i[3]!='':
      print(i)
if __name__=='__main__':
  start() #开始

运行的截图:

Python爬取12306车次信息代码详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 除法保留两位小数点的方法
Jul 16 Python
python爬取微信公众号文章的方法
Feb 26 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
Jul 03 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Python读取xlsx数据生成图标代码实例
Aug 12 #Python
Idea安装python显示无SDK问题解决方案
Aug 12 #Python
Python selenium如何打包静态网页并下载
Aug 12 #Python
Python selenium爬取微信公众号文章代码详解
Aug 12 #Python
PyQt5 QDockWidget控件应用详解
Aug 12 #Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 #Python
基于python requests selenium爬取excel vba过程解析
Aug 12 #Python
You might like
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
《春笋》教学反思
2014/04/15 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
毕业实习计划书
2015/01/16 职场文书
工作检讨书范文
2015/01/23 职场文书
大学生逃课检讨书
2015/05/04 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript