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使用matplotlib画饼状图
Sep 25 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
使用python实现mqtt的发布和订阅
May 05 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
python实现BP神经网络回归预测模型
Aug 09 Python
wxpython绘制音频效果
Nov 18 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 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闭包函数详解
2016/02/13 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
js一组验证函数
2008/12/20 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
AngularJS语法详解
2015/01/23 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python中format()函数的简单使用教程
2018/03/14 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
业务部主管岗位职责
2014/01/29 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android