国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬蟲實戰之12306搶票開源

2020-02-16 00:53:23
字體:
來源:轉載
供稿:網友

今天就和大家一起來討論一下python實現12306余票查詢(pycharm+python3.7),一起來感受一下python爬蟲的簡單實踐

我們說先在瀏覽器中打開開發者工具(F12),嘗試一次余票的查詢,通過開發者工具查看發出請求的包

余票查詢界面

可以看到紅框框中的URL就是我們向12306服務器發出的請求,那么具體是什么呢?我們來看看
https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2019-01-21&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=SZQ&purpose_codes=ADULT
可以看到發出請求的幾個字段:

leftTicketDTO.train_date:查詢的日期
leftTicketDTO.from_station:查詢的出發地
leftTicketDTO.to_station:查詢的目的地
purpose_codes:不太清楚這個字段是用來做什么的,就默認吧

可以從我們遞交的URL請求看出,我們輸入的成都,深圳都變成了對應的編號,比如,成都(CDW)、深圳(SZQ),所以當我們程序進行輸入的時候要進行一下處理,12306的一個地方存儲著這些城市名與編碼對應的文檔:

https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971

站點編碼對應

下面我們就編寫一個小程序,將這些城市名與編號提取出來:

import re,requestsurl = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971"response = requests.get(url,verify=False)#將車站的名字和編碼進行提取chezhan = re.findall(r'([/u4e00-/u9fa5]+)/|([A-Z]+)', response.text)chezhan_code = dict(chezhan)#進行交換chezhan_names = dict(zip(chezhan_code.values(),chezhan_code.keys()))#打印出得到的車站字典print(chezhan_names)

得到的打印結果如下(只截取部分顯示):

{'VAP': '北京北', 'BOP': '北京東', 'BJP': '北京', 'VNP': '北京南', 'BXP': '北京西', 'IZQ': '廣州南', 'CUW': '重慶北', 'CQW': '重慶', 'CRW': '重慶南', 'CXW': '重慶西', 'GGQ': '廣州東', 'SHH': '上海', 'SNH': '上海南', 'AOH': '上海虹橋', 'SXH': '上海西', 'TBP': '天津北', 'TJP': '天津', 'TIP': '天津南', 'TXP': '天津西', 'XJA': '香港西九龍', 'CCT': '長春', 'CET': '長春南', 'CRT': '長春西', 'ICW': '成都東', 'CNW': '成都南', 'CDW': '成都', 'CSQ': '長沙', 'CWQ': '長沙南',}

接下來我們就動手開始程序的主要代碼編寫:

def main():  date     = input("請輸入時間(如2019-01-22):/n")  from_station = chezhan_code[input("請輸入起始站點:/n")]  to_station  = chezhan_code[input("請輸入目的站點:/n")]  url     = "https://kyfw.12306.cn/otn/leftTicket/queryZ?"  headers = {    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400"  }  url=url+"leftTicketDTO.train_date="+date+"&leftTicketDTO.from_station="+from_station+"&leftTicketDTO.to_station="+to_station+"&purpose_codes=ADULT"  #print(url) 已經檢查過生成的URL是正確的  #request請求獲取主頁  r = requests.get(url,headers=headers)  r.raise_for_status()  #如果發送了一個錯誤的請求,會拋出異常  r.encoding = r.apparent_encoding  showTicket(r.text)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双桥区| 开原市| 怀安县| 来安县| 山东省| 秦安县| 文安县| 定边县| 德保县| 资溪县| 泽州县| 峨眉山市| 阳泉市| 晋中市| 香格里拉县| 读书| 牙克石市| 宁城县| 昭苏县| 越西县| 平定县| 新余市| 阿坝县| 邓州市| 甘德县| 海原县| 东至县| 张家港市| 徐州市| 灵璧县| 抚宁县| 西丰县| 大厂| 临沭县| 滁州市| 墨玉县| 葫芦岛市| 涿鹿县| 哈巴河县| 鄂尔多斯市| 开江县|