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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python计数排序和基数排序算法实例
Apr 25 Python
Python生成pdf文件的方法
Aug 04 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
python实现飞机大战
Sep 11 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
pytest进阶教程之fixture函数详解
Mar 29 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 getsiteurl()函数
2009/09/05 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
php查询操作实现投票功能
2016/05/09 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
web打印小结
2017/01/11 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
python format 格式化输出方法
2018/07/16 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
python实现人工蜂群算法
2020/09/18 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
《在大海中永生》教学反思
2014/02/24 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书