當前位置:
首頁 > 最新 > python爬蟲實戰:利用python實現12306自動查票

python爬蟲實戰:利用python實現12306自動查票

馬上要期末了,最近感覺事情也很多,準備研究進入MySQL的世界,發現自己scrapy框架還沒學好,不能著急。女朋友馬上過生日,各位看官老爺幫我想想給她個什麼surprise好呢?

之前有在網上看見過利用python實現12306自動查票的文章,最近剛好也在看web開發方面的知識,所以決定自己也來做一個。我看了很多篇不同版本的文章,昨天花費了一天的時間,終於將這個腳本寫出來了。 網上大多數的教程都是模仿的B站實驗樓小哥哥直播是寫的代碼,他的代碼確實寫得很漂亮,但是有太多關於類和對象的知識,剛學習不久的朋友估計難已理解,所以,我按照自己的理解,寫出了一個適合新手版的代碼。廢話不多說了,下面直接進入正題。

先給一下實現之後的截圖:

大致上就是這樣的一個類型。

本次代腳本實現的環境以及需要的工具:

OS:windows 10

IDE:pycharm

需要的庫:requests prettytable re docopt json

python基本語法知識


這個庫的基本作用,就是能將用戶輸入的命令行參數轉化為一個python字典類型。舉個例子:

上面的代碼將會輸出的是一個字典arguments:

可以看見,這也就是docopt庫的作用,直接將輸入的參數變成了一個字典!可想而知,這個庫真的很強。這裡的_doc_這個方法可以簡單的理解為python中的文字信息,包括注釋中的文字。這這裡我解釋一下上面代碼的意思:[] 中的內容是可選擇性的輸入,也就是說,在命令行裡面進行輸入的時候,可以[]中的內容可以輸入,也可以不輸入。 而後面的 則是必須輸入,關於docopt的更多使用方法,可以參考python官方文檔:docopt/docopt。

這個庫可以將輸入內容變成一個表格類型,和mysql差不多這裡給出基本用法:

上面的代碼輸出結果為

可以看見,這裡輸出了一個數表。

更多用法可以參考官方文檔:python實用庫:PrettyTable 學習


具體的抓包分析方法不想說了,可以看看我之前的文章:(更新)python爬蟲實戰:模擬登錄12306(主要講解驗證碼的突破)

可以看見當我輸入出發地,目標地,和時間之後,瀏覽器將會提交一個get請求(沒錯,是get,不是post)。

可以看見伺服器response回來的數據:

是一個json類型的數據。這就很明顯了,之後的數據處理應該處理json數據。

再分析get的url為:

可以看見,提交數據的真實url為:

kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2018-05-25&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

仔細觀察我打黑線的地方,容易發現,這個url就是12306api的介面類型。

那麼,這些代號到底是怎麼來的呢?

由於是非同步載入,我們連按F5,可以找到一個js請求:

可以看出,這個url就是12306,地點與代號對應的一個js文件,我們訪問這個url:

可以看見,果然是這樣!

那麼,接下來就可以開始寫代碼了!


parse_stations.py

這裡涉及到了正則表達式的知識,可以看我之前的一篇文章:python:處理字元串的另一大神器——正則表達式,利用正則提取豆瓣電影排行榜信息

寫完之後,再命令行裡面輸入

這樣就可以直接以追加的方式,新建一個stations.py文件,它的內容是:

ticket.py的主要代碼

最後輸出結果:

完整代碼我將會上傳到我的gith上,可以自行下載:

reBiocoder/python

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 生物信息與python 的精彩文章:

python:模擬瀏覽器登陸網頁

TAG:生物信息與python |