Fesimi 發表於 15-3-16 21:38

關於~~利用 Python 抓取資料導入 AB~~的問題

calvinhorng
大大, 你在這篇發表~~利用 Python 抓取資料導入 AB,
http://www.coco-in.net/thread-26784-1-1.html
小弟有些使用上的問題.
想請教您一下.

我下載盤後的檔案之後,執行 TSE_CLOSE.bat
並沒有在
C:\盤後\TSE\ 會產生兩個次目錄 CLOSE 與 AB CLOSE內存放證交所的原始資料

有可能的原因是什麼呢!!

1. 我的作業系統是使用XP SP2
2. 我安裝的是 Python27 (TSE_CLOSE.bat 內的第一個Python 執行檔的路徑 我有修改過了)

calvinhorng 發表於 15-3-17 08:04

我發現 2015/03/13 之後
盤後資料我之前寫的Python不能抓了

lwhuang 發表於 15-3-17 08:29

calvinhorng 發表於 15-3-17 08:04 static/image/common/back.gif
我發現 2015/03/13 之後
盤後資料我之前寫的Python不能抓了

他們一直改版是故意的吧

calvinhorng 發表於 15-3-17 08:42

還在研究當中
現在先用AutoIt V3
配合之前Python 程式先暫度

#include <Date.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>

$backDays=2 ; 回抓日數
$outPath="D:\TSE\CLOSE" ; 輸出目錄

;註解
;我的環境需要先要先開一個 IE
;因為以下這些碼一點用都沒有

;Opt("WinTitleMatchMode", 2)
;ShellExecute("iexplore.exe", "about:blank")
;sleep(1000)
;WinWait("Internet Explorer",10)
;

;以下的參數要用 Autoit Window Info 抓

$winX=1280   ; IE 視窗大小的X值
$winY=1080   ; IE 視窗大小的Y值

$queryX=1190 ; IE視窗內查詢按鈕的X值
$queryY=390; IE視窗內查詢按鈕的Y值

$dnCSV_X=430 ; IE視窗內下載按鈕的X值
$dnCSV_Y=450 ; IE視窗內下載按鈕的Y值

$saveX=1012 ; 視窗下方儲存按鈕的X值
$saveY=1045 ; 視窗下方儲存按鈕的Y值


$saveAsX=1095 ; 視窗下方另儲新檔按鈕的X值
$saveAsY=1015 ; 視窗下方另儲新檔按鈕的Y值

;回圈
For $i = $backDays To 0 Step -1
;$SysDate=_DateTimeFormat(_NowDate( ), 1)

$sNewDate = _DateAdd('d', -$i, _NowCalcDate())
Local $aDays = StringSplit($sNewDate,"/")


$Year=$aDays
$TYear=string(number($YEAR)-1911)
$MON=$aDays
$DAY=$aDays


Local $inTDate=$TYEAR&"/"&$Mon&"/"&$DAY
Local $inDate=$YEAR&"/"&$Mon&"/"&$DAY
Local $Date=$YEAR&$Mon&$DAY

;MsgBox($MB_SYSTEMMODAL, "", $inTDate& @CRLF & $inDate &@CRLF & $Date,10)

$oIE = _IECreate ("http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php", 1)
_IELoadWait($oIE)
Sleep(1000)
;Local $oForm = _IEFormGetObjByName ($oIE, "query-form")

;國曆日期
Local $oTDate = _IEGetObjByName ($oIE, "qdate")
_IEFormElementSetValue($oTDate, $inTDate)
;西元日期
Local $oDate = _IEGetObjByName ($oIE, "date-field-ad")
_IEFormElementSetValue($oDate, $inDate)
;分類項目
Local $oType= _IEGetObjByName ($oIE, "selectType")
_IEFormElementSetValue($oType, "ALLBUT0999")


Local $hWnd1 = WinWait("", "TWSE 臺灣證券交易所 > 每日收盤行情 - Internet Explorer", 10)
WinActivate( $hWnd1)
;IE視窗大小調整
WinMove($hWnd1, "", 0, 0, $winX, $winY)
;WinActivate( $hWnd1)
;模擬 查詢按鍵下壓
MouseClick ( "left", $queryX, $queryY ) ; 查詢

;等待資料更新
_IELoadWait($oIE)
sleep(1000)

;WinActivate( $hWnd1)
;模擬 下載CSV按鍵下壓
MouseClick ( "left", $dnCSV_X, $dnCSV_Y ) ; 下載 CSV
_IELoadWait($oIE)

sleep(500)

; 等待下方儲存提示
MouseClick ( "left", $saveX, $saveY) ; 存檔
MouseClick ( "left", $saveAsX, $saveAsY ) ; 另存新檔
;sleep(5000)

; 等待另存新檔新視窗
Local $hWndS = WinWait("另存新檔", "", 10)
sleep(100)
ControlSetText($hWndS,"","",$outPath) ; Set the name of the file to the original value.
;sleep(100)
ControlSetText($hWndS,"","",$outPath&"\"&$Date&".csv")
ControlClick($hWndS,"","")

;如果有相同檔案存在選擇 取代
Local $hWndS1 = WinWait("確認另存新檔", "", 5)
Send (("!Y") ) ; 取代

_IEQuit($oIE) ; 關閉 IE
sleep(100)
next


calvinhorng 發表於 15-3-17 08:59

我用wireShark 抓到他們把東西搞得太複雜了
或許就得用AutoIt了
過一陣子它們可能還會換按鈕的XY值
{:4_192:}

Fesimi 發表於 15-3-17 20:38

calvinhorng 發表於 15-3-17 08:59 static/image/common/back.gif
我用wireShark 抓到他們把東西搞得太複雜了
或許就得用AutoIt了
過一陣子它們可能還會換按鈕的XY值


謝謝C大的回應,
如此一來,我只能先用手動的方式頂著先了.

另外請教C大一個問題,
可以用先前某位大大寫的TWS4AB來進行修改嗎!!!

我曾想試著看看TWS4AB 的Python 程式內容,
但它都是 pyd 檔, 沒辦法用Python 的編輯器看.


calvinhorng 發表於 15-3-17 22:59

本帖最後由 calvinhorng 於 15-3-17 23:17 編輯


我不知道 TWS4AB 是如何抓盤後資料
我試過了
你可以解開後試試看
原則上我沒處理權證所以 selectType=ALLBUT0999

calvinhorng 發表於 15-3-17 23:18

自己看一下批次檔
要把python 目錄和輸出目錄改成適合你的環境

Fesimi 發表於 15-3-18 20:31

calvinhorng 發表於 15-3-17 23:18 static/image/common/back.gif
自己看一下批次檔
要把python 目錄和輸出目錄改成適合你的環境
大大~~
我有修改批次檔了,如下

C:\python27\python C:\盤後\TSE_CLOSE_v1.py 3 C:\盤後\TSE\

點完批次檔後就看到一個像cmd的視窗快速開啟也快速結束,
不懂那視窗為何,同時沒有csv檔產生.





Fesimi 發表於 15-3-18 20:36

calvinhorng 發表於 15-3-17 23:18 static/image/common/back.gif
自己看一下批次檔
要把python 目錄和輸出目錄改成適合你的環境

我試著直接用Python 執行看到以下錯誤



==============以下為 Python 訊息
>>>

Traceback (most recent call last):
File "C:\盤後\TSE_CLOSE_v1.py", line 2, in <module>
    import urllib.request
ImportError: No module named request

calvinhorng 發表於 15-3-18 21:41

看你要不要升到 Python 3.3
如果你還要用 Python27
我的電腦已經沒有 Python27 環境


你可能要改一下code
請參考
https://docs.python.org/2/howto/urllib2.html

Fesimi 發表於 15-3-19 21:18

calvinhorng 發表於 15-3-18 21:41 static/image/common/back.gif
看你要不要升到 Python 3.3
如果你還要用 Python27
我的電腦已經沒有 Python27 環境


好的,我會升到3.3試試.
C大謝謝喔!!

Sirius 發表於 15-3-22 17:20

calvinhorng 發表於 15-3-17 08:04 static/image/common/back.gif
我發現 2015/03/13 之後
盤後資料我之前寫的Python不能抓了

今天才看到這篇,才知道網站有改版,只是不清楚動了哪裡
小弟之前在「證交所的每日收盤行情csv」這篇發的方法還可以用,供C大參考

看了C大的AutoIt代碼,小弟應該沒搞錯,是抓證交所的盤後資料,CSV檔,那就與上述抓的東西一樣

另外Python也可以使用Selenium來模擬瀏覽器,pythonist大在「請教用python 抓歷史資料」的回覆內容可供參考
有些做的很麻煩的網站,我就用這方式來處理。必要的話,先用Chrome測試好,再改成PhantomJS,在無GUI的機器上也可以用
有興趣的話,這篇也可參考
頁: [1]
查看完整版本: 關於~~利用 Python 抓取資料導入 AB~~的問題