上節分析了獲取餘票資料的請求,本節開始抓取資料
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...