一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

基于Python實現火車票搶票軟件

目錄

導語

每年得節假日一到,大家頭疼得總時同一個問題:你買到回家得票了嗎?

尤其是大型得節日:”比如國慶、春節......“

數以億計得人口遷移,讓車票成了一年里最難買到得那張票。

跨站買票、買短途票上車補票、準點撿漏等已是老生常談得技巧。隨著互聯網得發展,搶票軟件成為購票熱門渠道。搶票軟件得到底靠譜嘛?能搶到票嘛?

近日,小編給大家就正式編寫一款Python實現查票以及自動購票搶票得小程序給大家,希望大家如愿!

環境準備

1)運行環境:Python 3 、Pycharm、谷歌瀏覽器、谷歌驅動 。

2)模塊準備: 

requests ---> pip install requests (數據請求模塊)

prettytable ---> pip install prettytable (打印好看一些 )

selenium ---> pip install selenium==3.141.0 (模擬人得行為去操作瀏覽器)

json ---> 內置模塊 不需要安裝

PS小編有話說:(新手看過來)

模塊安裝問題:

如果安裝python第三方模塊:

1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車

2. 在pycharm中點擊Terminal(終端) 輸入安裝命令

安裝失敗原因:

失敗一: pip 不是內部命令

解決方法: 設置環境變量

失敗二: 出現大量報紅 (read time out)

解決方法: 因為是網絡鏈接超時,  需要切換鏡像源

例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名

失敗三: cmd里面顯示已經安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法導入

解決方法: 可能安裝了多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好

或者你pycharm里面python解釋器沒有設置好。

如何配置pycharm里面得python解釋器?

1. 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)

2. 點擊齒輪, 選擇add

3. 添加python安裝路徑

pycharm如何安裝插件?

1. 選擇file(文件) >>> setting(設置) >>> Plugins(插件)

2. 點擊 Marketplace  輸入想要安裝得插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese

3. 選擇相應得插件點擊 install(安裝) 即可

4. 安裝成功之后 是會彈出 重啟pycharm得選項 點擊確定, 重啟即可生效

項目思路

12306 每天只能退票三次

查票

購票

建議谷歌或者火狐....

爬蟲采集數據思路:

一. 分析數據來源

車票信息, 來源那個數據包 <車票信息請求那個網站url地址可以得到>

開發者工具  1  2

二. 代碼實現步驟:

1. 發送請求, 對于剛剛分析得到url地址發送請求

https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2022-07-02&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

2. 獲取數據, 獲取服務器返回響應數據, response

3. 解析數據, 提取我們想要車次信息

代碼展示

import requests# 導入漂亮得表格輸出模塊 ---> 第三方模塊 需要 在cmd里面進行 pip install prettytableimport prettytable as pt# 導入jsonimport json# 導入selenium模塊 ---> 第三方模塊 需要 在cmd里面進行 pip install selenium==3.141.0from selenium import webdriver# 導入賬號密碼from password import account, Password# 導入selenium控制鍵盤from selenium.webdriver.common.keys import Keys# 創建瀏覽器 <打開瀏覽器>  瀏覽器驅動放在python安裝目錄里面就不需要添加路徑  def get_ticket(num, from_station, to_station, date_key):    driver = webdriver.Chrome()    # 輸入網址    driver.get('https://kyfw.12306.cn/otn/resources/login.html')    # 通過元素定位, 找到賬號輸入框 輸入賬號 send_keys() 發送或者輸入內容    driver.find_element_by_css_selector('#J-userName').send_keys(account)  # 通過 css 選擇器查找元素    # 通過元素定位, 找到密碼輸入框 輸入密碼 send_keys() 發送或者輸入內容    driver.find_element_by_css_selector('#J-password').send_keys(Password)  # 通過 css 選擇器查找元素    # 通過元素定位, 找到登陸按鈕, 點擊登陸    driver.find_element_by_css_selector('#J-login').click()    # 隱式等待    driver.implicitly_wait(10)    # 通過元素定位, 點擊彈窗確定按鈕 .表示class # 表示ID    driver.find_element_by_css_selector('.modal-ft .btn').click()    # 通過元素定位, 點擊車票預定    driver.find_element_by_css_selector('#link_for_ticket').click()    # 通過元素定位, 點擊鍵盤回車    driver.find_element_by_css_selector('#fromStationText').send_keys(Keys.ENTER)    # 通過元素定位, 清空輸入框內容    driver.find_element_by_css_selector('#fromStationText').clear()    # 通過元素定位, 點擊一下輸入框    driver.find_element_by_css_selector('#fromStationText').click()    # 通過元素定位, 輸入出發城市    driver.find_element_by_css_selector('#fromStationText').send_keys(from_station)    # 通過元素定位, 點擊鍵盤回車    driver.find_element_by_css_selector('#fromStationText').send_keys(Keys.ENTER)    driver.find_element_by_css_selector('#toStationText').clear()    driver.find_element_by_css_selector('#toStationText').click()    driver.find_element_by_css_selector('#toStationText').send_keys(to_station)    driver.find_element_by_css_selector('#toStationText').send_keys(Keys.ENTER)    date = driver.find_element_by_css_selector('.inp-w #train_date')    date.clear()    date.send_keys(date_key)    # 通過元素定位, 點擊查詢按鈕    driver.find_element_by_css_selector('#query_ticket').click()    if num == 1:        driver.find_element_by_css_selector(f'#queryLeftTable tr:nth-child({num}) a.btn72').click()    elif num != 1:        driver.find_element_by_css_selector(f'#queryLeftTable tr:nth-child({num + 1}) a.btn72').click()        # #normalPassenger_0    driver.find_element_by_css_selector('#normalPassenger_1').click()     driver.find_element_by_css_selector('#submitOrder_id').click()    driver.find_element_by_css_selector('#qr_submit_id').click()    driver.find_element_by_css_selector('#qr_submit_id').click()  f = open('city.json', encoding='utf-8')text = f.read()  # 讀取文件json_data = json.loads(text)from_city = input('請輸入你要出發城市: ')to_city = input('請輸入你要到達城市: ')date = input('請輸入你要出發得時間: ')from_station = json_data[from_city]to_station = json_data[to_city] """發送請求, 模擬瀏覽器對于url地址發送請求    快捷批量替換方法:        選中內容, ctrl + R 輸入正則表達式命令點擊全部替換即可        (.*?): (.*)        '$1': '$2',"""# 確定請求網址 ---> 如果對于長鏈接, 我們是可以分段寫 ? 后面都是屬于請求參數url = 'https://kyfw.12306.cn/otn/leftTicket/query'# 請求參數 ---> 字典數據類型, 構建成完整鍵值對, 鍵值對與鍵值對之間要用逗號隔開data = {    'leftTicketDTO.train_date': date,    'leftTicketDTO.from_station': from_station,    'leftTicketDTO.to_station': to_station,    'purpose_codes': 'ADULT',}# 請求頭 ---> 偽裝模擬瀏覽器得, 把python代碼偽裝成瀏覽器發送請求headers = {    # User-Agent: 用戶代理, 表示瀏覽器基本身份標識    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36',}# 發送請求 ---> 返回數據 <Response [200]> 響應對象 200狀態碼表示請求成功response = requests.get(url=url, params=data, headers=headers) # 獲取數據 response.json() 獲取響應對象json字典數據# 解析數據 ---> 根據數據類型以及你想要獲取數據內容, 選擇最合適提取方式 根據冒號左邊得內容, 提取冒號右邊內容result = response.json()['data']['result'] # 實例化對象tb = pt.PrettyTable()tb.field_names = [    '序號',    '車次',    '出發時間',    '到達時間',    '耗時',    '特等座',    '一等',    '二等',    '軟臥',    '硬臥',    '硬座',    '無座',]page = 0lis = []# for循環 就把列表里面元素一個一個提取出來for index in result:    # split() 字符串分割方法 --> 返回是列表    content_list = index.split('|')    #  根據列表索引位置提取內容    num = content_list[3]  # 車次    start_time = content_list[8]  # 出發時間    end_time = content_list[9]  # 到達時間    use_time = content_list[10]  # 耗時    topGrade = content_list[25]  # 特等座    if topGrade:        pass    else:        topGrade = content_list[32]    first_class = content_list[31]  # 一等    second_class = content_list[30]  # 二等    hard_sleeper = content_list[28]  # 硬臥    hard_seat = content_list[29]  # 硬座    no_seat = content_list[26]  # 無座    soft_sleeper = content_list[23]  # 軟臥    dit = {        '車次': num,        '出發時間': start_time,        '到達時間': end_time,        '耗時': use_time,        '特等座': topGrade,        '一等': first_class,        '二等': second_class,        '軟臥': soft_sleeper,        '硬臥': hard_sleeper,        '硬座': hard_seat,        '無座': no_seat,    }    lis.append(dit)    tb.add_row([        page,        num,        start_time,        end_time,        use_time,        topGrade,        first_class,        second_class,        soft_sleeper,        hard_sleeper,        hard_seat,        no_seat,    ])    page += 1    # 更加方便直觀查看 索引位置 ---> 列表可以通過索引位置取值    # num = 0    # for i in content_list:    #     # i 列表里面元素, num 對應列表索引位置    #     print(i, num)    #     num += 1    # breakprint(tb)  num = input('請輸入你想要購買車票序號: ') get_ticket(num=int(num), from_station=from_city, to_station=to_city, date_key=date)

到此這篇關于基于Python實現火車票搶票軟件得內容就介紹到這了,更多相關Python火車票搶票內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 久久久久久久网 | 久久香蕉网 | 国产精品乱码一二三区的特点 | 欧美日韩精品一区二区天天拍 | 99视频在线 | 欧美综合在线观看 | 欧美一区二区三区在线观看 | 亚洲国产午夜 | 九九九久久国产免费 | 亚洲一区二区精品 | 欧美日韩国产精品一区 | 日韩二区| 日韩av成人| 成人精品一区二区三区中文字幕 | 可以免费观看的av | 一区二区国产精品 | 欧美成人hd| 日韩午夜场 | 亚洲精品aⅴ | 在线精品一区二区三区 | 精品日韩 | 欧美成人精品一区二区男人看 | 九九热久久免费视频 | 一级黄色片网站 | 龙珠z国语版在线观看 | 久久九九色 | 亚洲欧洲一区二区 | 国产精品视频在线播放 | 一区二区国产精品 | 亚洲精品久久视频 | 国产三区av | 亚洲专区在线 | 婷婷色国产偷v国产偷v小说 | 国产三级 | 国产欧美日韩一区二区三区 | 国产精品视频一 | 日本一区二区三区四区 | 亚洲日本中文 | 91精品在线观看入口 | 久久国产精品一区二区三区 | 国产精品久久久久久一区二区三区 |