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 获取et和excel的版本号
Apr 09 Python
python获取文件版本信息、公司名和产品名的方法
Oct 05 Python
简单学习Python time模块
Apr 29 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Python之修改图片像素值的方法
Jul 03 Python
Django MEDIA的配置及用法详解
Jul 25 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
python实现简易淘宝购物
Nov 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
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
详解php命令注入攻击
2019/04/06 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Python设计模式之工厂模式简单示例
2018/01/09 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python os.rename实例用法详解
2020/12/06 Python
Python的信号库Blinker用法详解
2020/12/31 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
若干个Java基础面试题
2015/05/19 面试题
电子商务应届生自我鉴定
2014/01/13 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
爬山的活动方案
2014/08/16 职场文书
python实现自定义日志的具体方法
2021/05/28 Python