生活随笔
收集整理的這篇文章主要介紹了
python爬虫系列:12306票务信息爬虫
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
- 授人以魚不如授人以漁,這篇文章主要想教大家的是分析過程,以后遇到其他問題時也能從容應付。當然,在文章最后會附上代碼,直接點的同學可以跳過前面兩節
一、環境配置
- Python版本:3.7
- IDE:PyCharm
- 用到的庫:requests
二、分析過程
確認數據所在的網頁。好的,就是它了
一般來說,這種查票肯定是有接口的,只要我們把接口找出來,獲得票務信息就只需簡單的把參數傳進去就行了。所以我們按下 F12 來分析(我用的是 Chrome 瀏覽器),點擊 Network ,刷新一次頁面即可獲得這個頁面用到的資源文件
點擊資源文件可以查看詳細內容,這里我們選擇Response,查看它的響應內容。經過逐一排查后,我們即可發現接口的位置
我們點擊Headers查看它的請求URL,接口的參數有四個,分別是leftTicketDTO.train_date,leftTicketDTO.from_station,leftTicketDTO.to_station,purpose_codes。前三個就是字面意義,分別是出發時間,出發站,到達站。最后一個purpose_codes我也不知道啥用的,測試了很多次都是固定值ADULT
好了,接口都有了,我們是不是可以開始搞事情了?等等,上面那個出發站和到達站的參數(GZQ,HBB)是什么鬼?這個東西應該是車站對應的編號,我們再耐心地翻翻Network里的資源文件。我們很容易就能發現station_name.js?station_version=1.9109這個文件。就喜歡這種老實人,光看名字就知道它是干嘛的了
現在我們只需把上面獲得的數據處理一下,就能獲得各車站的編號了(注:處理代碼見最后)。接下來就是處理票務信息接口的信息了
最后就是調用接口獲得數據了,返回的數據如下。數據內容包括但不限于車票代號、車次、首發站、終點站、上車站、下車站、出發時間、到達時間、歷時、是否可預訂、日期、座位數量(高級軟臥、軟臥一等臥、軟座、無座、硬臥二等臥、硬座、二等座、一等座、商務座特等座、動臥等)
三、實現代碼
處理車站編號,車站的名字和編號分別儲存在cityName和cityNo中import requestsurl = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9109"
tempList = requests.get(url).text.split('\'')[1].split('|')
cityName = []
cityNo = []
for i in range(len(tempList)):
if (i % 5 == 1):cityName.append(tempList[i])
elif (i % 5 == 2):cityNo.append(tempList[i])
處理票務信息,結果儲存在ticketInfoList中import requests
import jsonurl = "https://kyfw.12306.cn/otn/leftTicket/queryT?leftTicketDTO.train_date=2019-09-05&leftTicketDTO.from_station=GZQ&leftTicketDTO.to_station=BJP&purpose_codes=ADULT"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0','Referer': 'https://www.12306.cn/index/'
}ticketsJson = json.loads(requests.get(url, headers=headers).text)
ticketsInfo = ticketsJson['data']['result']
ticketInfoList = []
for i in range(len(ticketsInfo)): temp = ticketsInfo[i].split('|')tempDict = {}tempDict['編號'] = temp[2]tempDict['車次'] = temp[3]tempDict['首發站'] = temp[4]tempDict['終點站'] = temp[5]tempDict['上車站'] = ticketsJson['data']['map'][temp[6]] tempDict['下車站'] = ticketsJson['data']['map'][temp[7]]tempDict['出發時間'] = temp[8]tempDict['到達時間'] = temp[9]tempDict['歷時'] = temp[10]tempDict['是否可預訂'] = temp[11]tempDict['上車站編號'] = temp[16]tempDict['下車站編號'] = temp[17]tempDict['高級軟臥'] = temp[21]tempDict['軟臥一等臥'] = temp[23]tempDict['軟座'] = temp[24]tempDict['無座'] = temp[26]tempDict['硬臥二等臥'] = temp[28]tempDict['硬座'] = temp[29]tempDict['二等座'] = temp[30]tempDict['一等座'] = temp[31]tempDict['商務座特等座'] = temp[32]tempDict['動臥'] = temp[33]tempDict['票價編號'] = temp[35]ticketInfoList.append(tempDict)
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的python爬虫系列:12306票务信息爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。