Python爬虫——12306网站车次信息

这篇博客介绍了如何使用Python爬虫从12306网站抓取车次信息。通过分析目标网页源码,获取URL,使用requests模块抓取数据并设置编码。接着提取所需信息,利用正则表达式匹配数据,并将数据转化为字典,方便后续处理。最后,解析JSON格式的数据,筛选出所需车次信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python爬虫——12306网站车次信息

相信每一个人都听说过谷歌、百度等浏览器,我们在在输入栏中输入我们想要的关键字,便会出现与我们输入关键字有关的网页。那么这些数据时是怎么来的呢?其实这跟网络爬虫有着很大的关系!接下来让我们来简单了解一下基于Python的网络爬虫。本博客简要介绍如何爬取12306网站上的信息。

分析目标网页的源码

首先我们要打开12306的网站按F12打开网站的源码进行观察。由于我们需要的是车次的信息,因此我们要访问的数据是网站检索时服务器所响应给我们的信息。因此我们找的url在含有query单词文件中。如下图所示
在这里插入图片描述

所需网页的抓取

在得到所想要信息的url后,我们就要进行所需网页的抓取了,这里我们需要导入一个requests模块,具体导入方法可以参考下这篇文章:链接: [https://blog.csdn.net/vily_luky/article/details/82456659?locationNum=15%20fps=]
通过requests模块我们便可以发送网络请求,得到返回响应数据了,同时我们还要注意一点,在抓取数据时有时候会被机器识别成爬虫程序,而这会导致我们得不到目标数据,因此我们用requests爬取网页源代码时,需要加上headers请求头,请求头可以让机器以为我们是浏览器访问,即使如此我们也不可频繁访问,如果被服务器发现可以会被封IP,因此我们间隔时间使用。(Tips:由于网站实时更新因此我们的url和headers也要跟着网页更换)

#请求url,使用get方法进行请求
    url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-07-02&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=GZQ&purpose_codes=ADULT'
    
    #添加请求头
    headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
               'Cookie': 'JSESSIONID=C0A2548F136E540548766C6F2685CD2E; BIGipServerpassport=937951498.50215.0000; route=9036359bb8a8a461c164a04f8f50b252; _jc_save_toStation=%u5E7F%u5DDE%2CGZQ; _jc_save_wfdc_flag=dc; BIGipServerportal=3067347210.17695.0000; RAIL_EXPIRATION=1593918909943; RAIL_DEVICEID=mfnZMxAaQqkOOxUNdIQCkimLzlKjH6PLwV5VrHAr-FW_cOkcexOGhmWMW1nTSqEfh8IHYLrQN957VEXPt8zOtVDZvpV8fMp3dTbywef3znOV5wcQEdUB_y3zTFZgzY06n_9pVY-3zi8WgZAuSWr6ZOdLCK1f4jxF; BIGipServerpool_passport=351076874.50215.0000; _jc_save_fromDate=2020-07-02; _jc_save_toDate=2020-07-02; BIGipServerotn=434635018.64545.0000; _jc_save_fromStation=%u6DF1%u5733%2CSZQ'}
               
    response = requests.get(url,headers = headers) #请求得到响应

在爬取到数据后,你会发现网页的源代码是乱码,我们看不懂,这时候我们便要对得到的数据进行设置编码格式,编码格式查看网页源代码的编码格式。encoding()方法可以将数据设置成指定的编码格式代码如下:

//设置相应的编码格式
response.encoding = 'utf-8'

爬取车站的信息

第一次我们爬取的信息是网页全部的信息,而我们则需要相应车次的主要信息,因此我们还需要爬取车站的信息,接下来我们则需要在网页的源代码中找到station的url如下图所示:
在这里插入图片描述
得到url后像第一次爬取信息的方法爬取信息,设置数据的编码格式
代码如下:

url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9150'

    headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
               'Cookie': 'JSESSIONID=C0A2548F136E540548766C6F2685CD2E; BIGipServerpasspor
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值