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