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 uuid模块使用实例
Apr 08 Python
解析Python中的异常处理
Apr 28 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
python装饰器实例大详解
Oct 25 Python
Python 一句话生成字母表的方法
Jan 02 Python
python实现数据分析与建模
Jul 11 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
分享3个非常实用的 Python 模块
Mar 03 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文件
2007/01/04 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
Django 中 cookie的使用
2017/08/17 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
详解vue组件开发脚手架
2018/06/15 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python爬取三国演义的实现方法
2016/09/12 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
使用python求解二次规划的问题
2020/02/29 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
Python实现手势识别
2020/10/21 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
python中time包实例详解
2021/02/02 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
生日派对邀请函
2014/01/13 职场文书
作风建设年活动总结
2014/08/27 职场文书
教师远程培训心得体会
2016/01/09 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers