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实现生成简单的Makefile文件代码示例
Mar 10 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python爬虫获取百度首页内容教学
Dec 23 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
python如何实现图片压缩
Sep 11 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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
ThinkPHP分页类使用详解
2014/03/05 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
为jQuery增加join方法的实现代码
2010/11/28 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
Python 通过pip安装Django详细介绍
2017/04/28 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Python 串口读写的实现方法
2019/06/12 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python实现中值滤波去噪方式
2019/12/18 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python连接mysql方法及常用参数
2020/09/01 Python
python用Configobj模块读取配置文件
2020/09/26 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
经典C++面试题一
2016/11/06 面试题
介绍一下SQL Server的全文索引
2013/08/15 面试题
同志主要表现材料
2014/08/21 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
应聘教师自荐信
2015/03/26 职场文书
股东大会通知
2015/04/24 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python