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操作SQLite简明教程
Jul 10 Python
Python中Random和Math模块学习笔记
May 18 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
python交互界面的退出方法
Feb 16 Python
浅谈python中get pass用法
Mar 19 Python
python opencv实现信用卡的数字识别
Jan 12 Python
python 使用建议与技巧分享(四)
Aug 18 Python
python进度条显示之tqmd模块
Aug 22 Python
解决Pycharm 运行后没有输出的问题
Feb 05 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 数组实例说明
2008/08/18 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Python并行分布式框架Celery详解
2018/10/15 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
文明青少年标兵事迹材料
2014/01/28 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
美术教师个人工作总结
2015/02/06 职场文书
施工安全员岗位职责
2015/04/11 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang