首页 > 编程语言 >利用Python爬取12306网站车次信息

利用Python爬取12306网站车次信息

时间:2024-11-25 17:34:21浏览次数:10  
标签:info city Python list 爬取 station 12306 save jc

整体思路:

首先利用https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9053 这个网站解析目前国内所有车站代码以及对应的城市名称

利用Python对该url进行处理

def get_respose(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r
    except:
        return None


def get_station_name_list():
    r = get_respose(NAME_URL)
    info = r.text
    match = re.search(r'\'(.*?)\'', info)
    station_lists = match.group(1)[1:]
    namelist = station_lists.split('@')
    city_list = set()
    for i in range(len(namelist)):
        station_info = namelist[i].split('|')
        station_sx1 = str(station_info[0])
        station_name = str(station_info[1])
        station_code = str(station_info[2])
        station_py = str(station_info[3])
        station_sx2 = str(station_info[4])
        station_city_code = str(station_info[6])
        station_city_name = str(station_info[7])
        res = (station_sx1 + '\u0001' + station_name + '\u0001' + station_code + '\u0001' + station_py + '\u0001' +
               station_sx2 + '\u0001' + station_city_code + '\u0001' + station_city_name + '\n')
        if station_city_name == '上海':
            city_list.add(station_code)
        else:
            pass
    print(city_list)
    city_lists = list(city_list)
    permutations = list(itertools.permutations(city_lists, 2))
    # print(permutations)
    return permutations

上述这段代码可以按照自己的需要进行调整,获取指定城市的所有站点代码,然后再进行两两站点排列组合,进而获取站点与站点之间所有可能出现的组合。

通过研究观察发现对应站点之间的数据都存储在铁路客户服务中心

https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no=240000G1050R&from_station_telecode=VNP&to_station_telecode=AOH&depart_date=2024-11-26

 再次构造函数对这个URL进行解析,以获取对应车次的列出编码

def spider_station(permutations):
    infos = list()
    current_date = datetime.now()
    previous_date = current_date - timedelta(days=-1)
    base_date = previous_date.strftime('%Y-%m-%d')
    headers = {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br, zstd",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Cookie": "_uab_collina=172827966864159075648991; JSESSIONID=8A54FAB2EAC4967564A7F83EDD7AB79B; _jc_save_czxxcx_toStation=%u5317%u4EAC%2CBJP; _jc_save_wfdc_flag=dc; _jc_save_czxxcx_fromDate=2024-10-08; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u4E0A%u6D77%2CSHH; _jc_save_fromDate=2024-10-07; _jc_save_toDate=2024-10-07; JSESSIONID=; CLIENT=wxgzh; tfstk=gqa-V1fu8tXuCpA28psmxHQpg3CcsyFzl8P6-vDkA-eY15JoA0iIhSGtnzmnPuqK9RVSFHqlapwYE-qnEY0SODw3eDmSqbYKA7DvrejrKeMIH8TnqJ4L0eFaTzfr-_uza2uCIObip7Pr8S0ZtHzJlZGaGeTWRNAhWhZAIObGouXX72WgEtYfcKhEhbTSVe1xcfGnRpM7dxij1fvSR2wCMmGsO39BP3gXGbkjd2gQdSMO03HeNvLLYY5yIXIejeY3kbn-peDWJvzWSck_vxLCCrhJdANSHeTIEbXmnSFleFPmzP2ts8bXyRFQ_kiYJK6tLrFbPkN2e9G4A80jEVsWM44zNliQ59-QB4eKfzivO6FuNY3xGP1Hbx4xEJa-c1Ytxqaif4Zc0TmnyfeQz8dpRRN0szo4JOpjLucZlXUF1HHKAgWaSPKCjdDtt31AMH-EVjP8NctRuGPZXjHGiSxeYmcqMAfAMH-EVjlxIsVDYHomg; _jc_save_fromStation=%u5317%u4EAC%2CBJP; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_toStation=%u4E0A%u6D77%2CSHH; route=6f50b51faa11b987e576cdb301e545c4; BIGipServerpassport=921174282.50215.0000; _jc_save_toDate=2024-11-22; _jc_save_fromDate=2024-11-23; BIGipServerotn=1859715338.50210.0000",
        "Host": "kyfw.12306.cn",
        "If-Modified-Since": '0',
        "Referer": "https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin",
        'User-Agent': 'Mozilla/5.0 (Windows NT 10

标签:info,city,Python,list,爬取,station,12306,save,jc
From: https://blog.csdn.net/liiukangkang/article/details/144029978

相关文章

  • Python 类初始化方法中初始化日志后,导致日志被重复打印
    Python类初始化方法中初始化日志后,导致日志被重复打印这个问题通常是由于添加处理器到同一个日志记录器上或使用了全局的日志记录器,从而导致重复的日志记录。以下是一些常见原因以及解决方法:问题原因日志处理器未被正确检查或清理:每次实例化类时,如果给日志记录器添加了新......
  • Python知识点精汇:字典篇精汇!
    目录一、字典是什么二、字典长什么样三、字典的基本操作(1)新增元素(2)删除元素(3)清空元素(4)获取全部键值四、其他(1)字典的遍历(2)定义嵌套字典(3)字典的合并(4)返回指定的键的值,找不到键时返回预设值(5)返回指定的键的值,找不到键时,将该键更新到字典中一、字典是什么字如其名......
  • 用Python将多个txt文件合并到同一个excel中的不同sheet
    写在前面:以下代码只适用于具有同样格式的多个txt文件合并在同一个excel的不同sheet,对于将所有txt按同样的格式合并在同一个sheet的,以下代码不能实现。导入模块:importopenpyxlimportos基本信息配置:filePath=r'C:\Amy\new'#存放txt的文件夹的存......
  • python速记
    1.将列表转化为字典的方法openpyxl中的enumerate()方法【转载编辑】在Python中将列表转换为字典的10种方法_列表转字典-CSDN博客 2.获取文件是否存在模块方法1:移除一个文件可以使用os.remove(‘文件’)方法 方法2:通过异常判断逻辑defcount_words(filename)......
  • 用python、JAVA等多种语言的实例代码演示教你如何免费获取股票数据(实时数据、历史数据
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • Python 运算符总结
    Python提供了多种运算符,用于执行不同类型的操作,包括数学运算、比较、逻辑运算等。以下是Python运算符的分类与用法总结。1.算术运算符用于进行基本的数学运算。运算符描述示例结果+加法5+38-减法5-32*乘法5*315/除法5/31.666...//整除5//31%取模(余数)5%32**......
  • python获取zabbix监控项图形
    python获取zabbix图形通过zabbix的api接口获取指定时间段的监控项图形图片示例:代码示例:#-*-coding:UTF-8-*-#可根据监控项获取zabbix下所有主机的Itemid,#通过zabbix库的graphs_items表,获取graphid#本文只通过graphid直接获取图形importrequestsimportdatetime......
  • Python爬虫:获取某站视频评论+数据可视化 手把手教程
    目录前言一、获取数据1.1 使用 requests 库发送HTTP请求1.2获取'User-Agent','cookie'和视频oid二、处理数据2.1某站响应的json数据格式 2.2封装函数process_comment:选择指定字段 2.3 封装函数fetch_comments:发送HTTP请求并保存字段为xlsx文件2.4cooki......
  • 计算机毕业设计必看必学03361springboot开放实验室管理系统原创定制程序,java、PHP、p
    springboot开放实验室管理系统摘要随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是使用动态网页开发技术java作为系统的开发语言,MySQL作为后台数据......
  • 计算机毕业设计必看必学35702+springboot电影推荐系统原创定制程序,java、PHP、python
                                                              摘 要随着互联网与移动互联网迅速普及,网络上的电影娱乐信息数量相当庞大,人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的电影推荐系统成......