- 帖子
- 102
- 主題
- 14
- 精華
- 0
- 積分
- 142
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office2016
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2016-7-31
- 最後登錄
- 2020-3-21

|
本帖最後由 VBALearner 於 2017-2-10 21:24 編輯
回復 18# sujane0701
回復 20# c_c_lai
應C大的期待,加入第二次POST,完稿。
想當初C大也回應我許多VBA的低能問題xD,記得當時我PO了一篇分享文"三大法人買賣超資料整理...",結果就有高手用Python把自動下載Excel的程式碼貼出來,引發幾十頁的熱烈討論。若不是高手無私分享、令我對Python語言大開眼界並產生高度興趣的話,我便不會去學習Py,可能還停留在VBA吧... 因此,完整的程式碼S大、C大請享用,並鼓勵Py高手對我的程式碼提出建言,S大您接下來只需要把資料存成Excel,這一步很簡單,網路找找吧,加油。- import requests
- import time
- from bs4 import BeautifulSoup
- postfreq = 0.8 #避免過度頻繁的訪問被當成惡意程式攻擊(類似小型DDOS),秒數間隔訪問是爬蟲的基本禮貌
- #僅以兩筆主提單號碼示範,欲增加自行更改即可
- 主提單號碼 = ['160-69306532','608-10318674'] #,'851-26325773','479-32003532','695-08802916','297-64647785']
- with requests.session() as r:
- res = r.get('https://accs.tradevan.com.tw/accsw-bin/APACCS/userLoginAction.do?userid=GUEST&password=GUEST')
- for code in 主提單號碼:
- print('主提單號碼 :',code,'\n')
- time.sleep(postfreq)
- payload = {'mawb_no':code,'查詢':'查詢'}
- res = r.post("https://accs.tradevan.com.tw/accsw-bin/APACCS/cImMergeQueryAction.do", data=payload) #第一次訪問
- res.encoding = "big-5"
- html = BeautifulSoup(res.text,"html.parser")
- num = 1
- for tr in html.body.select('table')[4].select('tr')[1:]: #把Table裡的tr資料逐列取出
- summary = [] #建立摘要資訊的存放陣列
- postdata = [] #二次訪問所需參數的存放陣列
- for td in tr.select('td'):
- summary.append(td.text.strip())
- if td == tr.select('td')[len(tr.select('td'))-1]: #這裡有下一個POST所需的資訊(參數),透過觀察網頁原始碼得知
- postdata.append(str(td).split('&')[1].replace('flight_no=','')) #參數1
- postdata.append(str(td).split('&')[2].replace('flight_date=','')) #參數2
- postdata.append(str(td).split('&')[3].replace('est_arrival_date=','')) #參數3
-
- print(' ','摘要資訊'+str(num),':',summary,'\n') #第一次查詢得到的摘要資料
- num+=1
- payload = {'mawb_no':code,
- 'voyage_flight_no':postdata[0],
- 'est_arrival_date':postdata[2],
- 'flight_date':postdata[1],
- 'qry_mawb_no':code,
- 'qry_sort':'0'
- }
- time.sleep(postfreq)
- res = r.post("https://accs.tradevan.com.tw/accsw-bin/APACCS/cImMergeListAction.do", data=payload) #第二次POST
- res.encoding = "big-5"
- html = BeautifulSoup(res.text,"html.parser")
- print(' ','詳細資料如下 :')
- for tr in html.select('table')[4].select('tr'):
- data = []
- for td in tr.select('td'):
- data.append(td.text.replace('\r','').replace('\n','').replace(' ','').strip())
- print('\t',data)
- print('\n')
- #運用其他模組把爬到的資料存成Excel即大功告成,甚至可以進一步運用select語法篩選特定位置的資料
複製代碼
|
|