12306餘票查詢 二 獲取餘票資料

2021-08-20 20:09:24 字數 2404 閱讀 7943

上節分析了獲取餘票資料的請求,本節開始抓取資料
class

get_tickets:

def__init__

(self,start_station,destination,date):

self.date = date

self.params =

首先是傳遞你到底要查什麼,就是前面分析所需的三個引數

其實這裡要判斷一下,輸入的站點在不在站點字典裡,但是,為了節省篇幅,先把整體流程走出來,那些細枝末節留到後面說.

把三個引數直接儲存進params字典中,為什麼date要單獨儲存為例項變數,這個後面會說

base_url = ""

defget_data

(self):

# 請求資料獲取餘票資訊

url = base_url + urlencode(self.params) # 拼接請求鏈結

text = requests.get(url).text # 傳送請求,以string方式返回

result = json.loads(text)["data"]["result"] # 提取出余票資訊

發現返回資料為字典,其實從請求裡的query就可以猜到是返回資料庫資訊了

用json把字串轉化為字典,再從字典裡取出餘票資訊

json.loads(text)

json.loads(text)[「data」]

json.loads(text)[「data」][「result」]

寫慢點,就是通過這三步獲得餘票資訊

這時,result是指向乙個列表,列表儲存每條列車的餘票資料

單獨拿出每條資料來看,會發現資料由」|」分割,這時,我們強大的split方法可以直接把這一大串的字串切分出來,返回列表型別資料

self.tickets_info = 

# 提取餘票資訊

for r in

result:

# 分割資料

r_list = r.split("|")

# 過濾資料

r_dict =

# 資料重整 如過對應資料為"",因為顯示出來得為"--",所以在這把字典所有的""="--"

for key in

r_dict:

if r_dict[key] == ""

: r_dict[key] = '--'

# 填入資料 把沒一條整理好的列車餘票字典,儲存到例項屬性tickets_info列表中

這裡對解析資料對應位置沒有做過多的贅述,因為這種解析資料,有耐心就好,做爬蟲肯定都得自己解析的

先寫到這裡,下一節把獲取票價貼出來,

import requests, json, threading, stationsinfo

from urllib.parse import urlencode

from get_ticket_price import get_price

base_url = ""

class

get_tickets:

def__init__

(self,start_station,destination,date):

self.date = date

self.params =

self.get_data()

defget_data

(self):

# 請求資料獲取餘票資訊

url = base_url + urlencode(self.params) # 拼接請求鏈結

text = requests.get(url).text # 傳送請求,以string方式返回

result = json.loads(text)["data"]["result"] # 提取出余票資訊

self.tickets_info =

# 提取餘票資訊

for r in result:

# 分割資料

r_list = r.split("|")

# 過濾資料

r_dict =

# 資料重整

for key in r_dict:

if r_dict[key] == "":

r_dict[key] = '--'

# 填入資料

這些就是這篇文章,涉及的**

獲取12306最新的餘票資訊

最近也快到春運高峰期了,每年到這個時候都是鐵路部門最忙的時候,同時也是12306 以後都以 來代替 大考的時候,出於乙個技術人員對於 的好奇所以嘗試獲取它的最新資料。之前準備實現乙個第三方訂票系統,後來分析之後發現破解驗證碼這第一關就沒辦法完成,所以最後放棄這個想法。後來考慮即使不能通過第三方來訂票...

12306 餘票檢測軟體

根據日期,始發站,終點站,車次等資訊檢測 12306 是否有餘票 給 12306 購票網頁注入指令碼,指令碼模擬請求,解析引數,獲取最終的餘票資訊 餘票資訊通過介面資訊通知服務端 1.獲取所有車站名稱對應的 map station names是 12306 定義的全部變數,注入的指令碼可以直接使用。...

12306餘票查詢 四 餘票價格併入資料集中

因為獲取每個車次的餘票,都需要請求資料,會有阻塞,這裡採用協程,提高效率 首先,寫個函式,是處理單個車次的加入票價行為 def get one price self,info dict 呼叫獲取票價的函式 price dict get price info dict train no info di...