當前位置:首頁 » 編程語言 » python12306

python12306

發布時間: 2022-02-27 01:52:03

1. 如何用python寫一個簡單的12306搶票軟體

看看這個可以嗎功能:1:全自動爬所有車站列表2:爬所有車站之間的所有車次,過濾重復,保存文件爬過程中保存文件遇到http異常,停止繼續腳本代碼[python]viewplain#coding:utf-8__author__='watsy'#城市對象classcityObject(object):def__init__(self,abbr_pinyin="",full_pinyin="",chinaname="",shortCode=""):self.abbr_pinyin=abbr_pinyinself.full_piyin=full_pinyinself.chinaname=chinanameself.shortCode=shortCode#火車classtrainObject(object):def__init__(self,tid="",code="",start_city="",start_time="",end_city="",end_time="",full_time=""):self.tid=tidself.code=codeself.start_city=start_cityself.start_time=start_timeself.end_city=end_cityself.end_time=end_timeself.full_time=full_timedefget_writestr(self):#return("%s,%s,%s,%s,%s,%s,%s")%(self.tid,self.code,self.start_city.encode('utf-8'),self.start_time,self.end_city.encode('utf-8'),self.end_time,self.full_time)str_return=self.tid+",";str_return+=self.code+",";str_return+=self.start_city+",";str_return+=self.start_time+",";str_return+=self.end_city+",";str_return+=self.end_time+",";str_return+=self.full_time;returnstr_return#火車列表classtrainModel(list):defisExist(self,train):forsub_traininself:ifsub_train.code==train.code:returnTruereturnFalsedefsave(self):train=self[-1]withopen(("%s.txt")%(train.code),"w")aswf:printtrain.get_writestr()wf.write(train.get_writestr().encode('utf-8'))#解析城市defparserCitys(data):parser_citys=[]fororiginal_cityindata:iforiginal_cityandlen(original_city)>1:split_city=original_city.split('|')parser_city=cityObject(split_city[0],split_city[3],split_city[1],split_city[2])parser_citys.append(parser_city)printlen(parser_citys)returnparser_citys#生成url地址defgetBookingTrainListUrl(start_code,end_code,day):strUrl=("/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTicket&")strUrl+=("orderRequest.train_date=%s&")%(day)strUrl+=("orderRequest.from_station_telecode=%s&")%(start_code)strUrl+=("orderRequest.to_station_telecode=%s&")%(end_code)strUrl+=("orderRequest.train_no=&trainPassType=QB&trainClass=QB%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00")returnstrUrltrains=trainModel()#解析預定車次列表defparser_booking_str(str_booking):json_book=json.loads(str_booking)datas=json_book['datas']ifdatasandlen(datas)>1:#printdatas.replace("","")trainlist=datas.replace("","").split("\\n")fortrain_strintrainlist:train_str_list=train_str.split(',')iflen(train_str_list)==17:str_id_and_code=train_str_list[1]str_start_city_and_time=train_str_list[2]str_end_city_and_time=train_str_list[3]str_full_time=train_str_list[4]#printstr_id_and_codestr_id=str_id_and_code[13:25]str_code=str_id_and_code[131:-7]#printstr_start_city_and_timeiflen(str_start_city_and_time)>50:str_start_city=str_start_city_and_time[43:-9]else:str_start_city=str_start_city_and_time[0:-9]str_start_time=str_start_city_and_time[-5:]#printstr_end_city_and_timeiflen(str_end_city_and_time)>50:str_end_city=str_end_city_and_time[42:-9]else:str_end_city=str_end_city_and_time[0:-9]str_end_time=str_end_city_and_time[-5:]tobj=trainObject(str_id,str_code,str_start_city,str_start_time,str_end_city,str_end_time,str_full_time)iftrains.isExist(tobj)==False:trains.append(tobj)trains.save()#打開城市列表頁面u=urllib2.urlopen("mon/station_name.js?version=1.40")buffer=u.read()u.close()#獲取列表buffer=buffer[20:-3]unformatter_citys=buffer.split('@')#得到城市parser_citys=parserCitys(unformatter_citys)city_length=len(parser_citys)today=datetime.date.today()torrow=datetime.timedelta(days=1)today=today+torrowday_str=("%s-%02d-%02d")%(today.year,int(today.month),int(today.day))print(day_str)strPath=os.getcwd()os.chdir("%s/train/"%strPath)foriinrange(1,city_length):forjinrange(0,len(parser_citys)-i):try:print("[%d%d]"%(i,j))sleep(0.09)strurl=getBookingTrainListUrl(parser_citys[i].shortCode,parser_citys[j].shortCode,day_str)url_add_header=urllib2.Request(strurl)url_add_header.add_header('X-Requested-With',"XMLHttpRequest")url_add_header.add_header('Referer',"/otsquery/query/queryRemanentTicketAction.do?method=init")url_add_header.add_header('Content-Type','application/x-www-form-urlencoded')url_add_header.add_header('Connection','keep-alive')resp=urllib2.urlopen(url_add_header)urlread=resp.read()resp.close()parser_booking_str(urlread)excepturllib2.HTTPErroraserr:print("error:[%s]url=[%s]")%(err,strurl)exit(1)os.chdir(strPath)printlen(trains)

2. 如何python12306的城市代碼

給你個我之前寫的參考 import re; import sys; import cookielib; import urllib; import urllib2; import optparse; import json; import httplib2; #reload(sys) #sys.setdefaultencoding('utf8'); def Login(): cj = cookielib.CookieJar(); ...

3. Python 實現一個火車票查詢的工具

使用 python 實現一個查詢火車票的小工具

主要功能:

輸入出發車站,到達車站,時間,然後返回所有的車次信息,和余票信息
支持輸入附加選項查詢不同的火車的類型,比如高鐵,動車。
#查詢上海到北京2017-04-25的高鐵和動車的車票,-g -d 是附加選項 表示高鐵和動車
python3 trains.py -gd 上海 北京 2017-04-25

運行結果:

1. 對12306網站買票過程抓包分析

點擊查詢之後,通過抓包發現返回了一個json的文件,查看這個文件,就是保存著具體車次的信息。抓包如下圖所示。

請求的url 是:
GET /otn/leftTicket/query?leftTicketDTO.train_date=2017-04-20&leftTicketDTO.from_station=TJP&leftTicketDTO.to_station=TYV&purpose_codes=ADULT HTTP/1.1

發現這個請求使用的是get方法,然後傳遞了四個參數,一個是出發站,一個是到達車站,一個是成年人or學生,最後一個是時間。如下圖:

但是有一個問題是,我輸入的是天津到太原,但是這個卻轉換成了拼音的簡稱。必須要找到這個轉換的字典是什麼,這樣才能正確的使用這個介面。

在網頁的源代碼找到這個文件,station_name.js 文件,如下圖:

js文件的格式是,如下圖,使用的話,必須要想用正則表達式處理一下:

2. 使用正則表達式處理這個js文件

使用正則表達式,將js 文件裡面的車站名字和對應的簡稱提取出來,然後寫入到一個station.py 文件裡面,作為字典,程序運行的時候,將這個文件以模塊的形式包含進去。
關於正則表達式,先佔一個坑,以後在詳細的寫。

正則表達式的代碼:

運行的時候:

# 將輸出重定向到一個新的文件stations.py裡面python3 test3.py > stations.py

3. 使用docopt 優雅的完成命令行的輸入

docopt 是一個很優雅的處理輸入的一個模塊,docopt可以根據你寫的文檔描述,可以自動為你生成解析器,可以非常容易的為你的python程序創建命令行界面。http://www.jianshu.com/p/d2c7cbf21931

4. 主程序

4.1 處理url

4.2 輸出

運行結果:

5. 使用prettytable模塊 優雅的輸出

詳細:http://www.jianshu.com/p/a6172b68810e

作者 sexycoder 本文轉載自簡書,轉載需授權

4. 如何用python寫一個簡單的12306搶票軟體

3
你自己的問題都不詳細,別人怎麼會給你詳細的答案。 搶票軟體一般也就是模擬瀏覽器發請求,當然純粹模擬也會有很多問題,比如驗證碼,請求數等等,具體看你要實現什麼效果。

5. 我寫了個python讀取12306網頁的腳本本地運行良好,一旦提交到GAE就報錯

在python中,一般我們使用urllib的urlopen來打開一個URL並抓取網頁內容或者伺服器的返回數據 ! 但是在GAE中不能這樣做,否則會報「訪問被拒絕」字樣的錯誤,主要原因是python中的urlopen使用了socket來連接

6. python 實現12306模擬瀏覽器登錄 手動輸入驗證碼 怎麼輸入

代碼中驗證碼提供有兩種方式,第一種通過webbrowser的open直接在瀏覽器中打開含有驗證碼的圖片,第二種就是將其以jepg格式存在C:\\Users\\Administrator\\Desktop\\checkcode.jepg。你可以根據自己主機的用戶名更改路徑。同時這個代碼必須先指定用戶名和賬號也可以實時輸入賬號的密碼,小小修改一下代碼就可以。

7. python 如果抓取驗證碼圖片 類似12306的登錄驗證碼圖片

這個以前做過多次。最大的麻煩是驗證碼的識別演算法的識別率太低。比如12306那種網站你登陸錯3次就限制你20分鍾。所以除非你有33%以上的識別率否則不要嘗試了。

通常做法是另存驗證碼圖片,通常收集幾十個,然後訓練自己的識別演算法。我曾經用PIL庫自己做過識別演算法,最高只有10%的識別率。效率還可以,一秒可以識別10次左右。主要是圖片很小,所以處理起來也快。

驗證碼識別還有多少公開的演算法,只能用來參考。不過真正識別都需要自己根據實際情況去訓練改進演算法。

8. python模擬登陸12306,該怎麼處理

給你個我之前寫的參考
import re;
import sys;
import cookielib;
import urllib;
import urllib2;
import optparse;
import json;
import httplib2;

#reload(sys)
#sys.setdefaultencoding('utf8');

def Login():

cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);

Url = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?mole=login&rand=sjrand";
resp = urllib2.urlopen(Url);

with open("code.png", "wb") as image:
image.write(resp.read())

codeStr = sys.stdin.readline();
codeStr = codeStr[:-1]

ajax_url = "https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn";
dc = {
'randCode' : codeStr,
'rand' : "sjrand"
};
request = urllib2.Request(ajax_url, urllib.urlencode(dc))
request.add_header("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
request.add_header('X-Requested-With','XMLHttpRequest')
request.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36')
request.add_header('Referer','https://kyfw.12306.cn/otn/login/init')
request.add_header('Accept','*/*')
request.add_header('Accept-Encoding','gzip, deflate')

f = urllib2.urlopen(request)
print(f.read())

LoginUrl = "https://kyfw.12306.cn/otn/login/loginAysnSuggest";
dc = {
'randCode' : codeStr,
'userDTO.password' : "你的密碼",
'loginUserDTO.user_name': "你的賬號"
};

PS:運行出錯的話按照報錯稍微調整一下,應該沒問題,之前我用來查票的。

9. 我從github上下載了python12306的搶票程序,但運行時一堆錯誤,求各位大神幫幫忙哈

貼一下具體鏈接呢
還有github上的代碼,一般star至少要幾十個的,才有一定質量保證

10. Python3爬12306怎麼提交預定也就是下單

最難得是識別驗證碼,把識別驗證碼先搞定再說吧

熱點內容
如何製作原始傳奇腳本 發布:2025-01-10 23:00:30 瀏覽:117
小程序免費模板源碼下載 發布:2025-01-10 22:55:23 瀏覽:233
gradle編譯jar 發布:2025-01-10 22:54:36 瀏覽:796
伺服器搭建棋牌游戲 發布:2025-01-10 22:53:49 瀏覽:642
java記事本程序 發布:2025-01-10 22:38:27 瀏覽:666
如何通過網吧電腦進入網吧伺服器 發布:2025-01-10 22:22:30 瀏覽:706
資料庫緩存是什麼 發布:2025-01-10 22:21:05 瀏覽:386
dns配置出現錯誤該怎麼辦 發布:2025-01-10 22:13:00 瀏覽:439
雲頂演算法 發布:2025-01-10 22:10:07 瀏覽:991
收件伺服器有什麼作用 發布:2025-01-10 21:50:01 瀏覽:391