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入门教程
Feb 08 Python
python 实现归并排序算法
Jun 05 Python
Python制作爬虫采集小说
Oct 25 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
Python中偏函数用法示例
Jun 07 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
python按比例随机切分数据的实现
Jul 11 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
Python实现视频自动打码的示例代码
Apr 08 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
python抓取文件夹的所有文件
2018/02/27 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
python装饰器代替set get方法实例
2019/12/19 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
python编写俄罗斯方块
2020/03/13 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
华为慧通面试题
2012/09/11 面试题
法学毕业生自荐信
2013/11/13 职场文书
男方父母证婚词
2014/01/12 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
python函数的两种嵌套方法使用
2022/04/02 Python