標題:
[發問]
網路資料下載問題,
[打印本頁]
作者:
wahaha6666
時間:
2014-11-20 22:11
標題:
網路資料下載問題,
本帖最後由 GBKEE 於 2014-11-21 17:14 編輯
GBKEE大大,之前有看您幫助解決在公開資訊觀測站抓資料的文
我需要抓取公司的財務資料(網址如下)
http://mops.twse.com.tw/mops/web/t164sb04
透過GBKEE大大的指導,我可以用VBA Excel抓到非金融公司的資料(程式碼如下)
Dim Ie, Doc As Object, i, j As Long
Set Ie = CreateObject("InternetExplorer.Application")
With Ie
Ie.Navigate "http://mops.twse.com.tw/mops/web/t164sb04"
Ie.Visible = True
Do While Ie.Busy Or Ie.ReadyState <> 4: DoEvents: Loop
.Document.getelementbyID("isnew").Value = "true" '最新資料 = true, 歷史資料 = false
.Document.getelementbyID("co_id").Value = "2888" '股票代號
.Document.getelementbyID("year").Value = Year '年度
.Document.getelementbyID("season").Value = Quarter '第一季 = 01, 第二季 = 02, 第三季 = 03, 第四季 = 04
For i = 0 To .Document.getElementsByTagName("input").Length - 1
If .Document.getElementsByTagName("input")(i).Type = "button" And .Document.getElementsByTagName("input")(i).Value = " 搜尋 " Then
.Document.getElementsByTagName("input")(i).Click
End If
Next
但碰到要下載金融公司的財報就卡住了,我不管怎試,就是進不到第2層(如下畫面)
上面的程式碼不會直接跑出財報,只會列出金融公司相關公司資訊。必須再次點選"詳細資料"才能叫出財報資料
[attach]19616[/attach]
不知道GBKEE大大能否幫忙看一下
感恩
作者:
HSIEN6001
時間:
2014-11-20 23:47
本帖最後由 HSIEN6001 於 2014-11-20 23:52 編輯
回復
1#
wahaha6666
何不直接抓合併報表,不用一檔一檔抓
http://mops.twse.com.tw/mops/web/t163sb04 (已包含銀行股)
PS: 剛剛看內容比較詳細 , ((請忽略我的建議 :))
作者:
HSIEN6001
時間:
2014-11-21 00:17
本帖最後由 HSIEN6001 於 2014-11-21 00:18 編輯
回復
1#
wahaha6666
也是參考GBKEE大大的Code
試試,有符合需求?!
Dim 網頁 As Object
Sub 半自動()
Dim i As Integer, K As Integer, ii, J
Dim path As String
path = "C:\Stock\"
'程式第一次執行: 打開網頁,在網頁中手動選擇資料後 , 按[總行]or[選定分行] ; 有資料的,執行第2次下載後會自動關閉網頁
'程式第二次執行: 讀取網頁資料到 Excel中. (有出現table資料表的,再按一次執行程式則會下載檔案至目標)
年度 = "103"
季期 = "3"
代號 = "2880"
On Error GoTo RE網頁
1:
If 網頁 Is Nothing Then
Set 網頁 = CreateObject("InternetExplorer.Application")
With 網頁
.Visible = True
.navigate "http://mops.twse.com.tw/mops/web/t164sb04?encodeURIComponent=1&step=1&firstin=ture&off=1&keyword4=&code1=&TYPEK2=&checkbtn=&queryName=co_id&TYPEK=all&isnew=false&co_id=" & 代號 & "&year=" & 年度 & "&season=" & 季期
.Height = 500
.Width = 1050
End With
Exit Sub
End If
If 網頁.Visible = False Then
網頁.Value = True
Exit Sub
End If
'**********讀取網頁 資料 *******************
Set A = 網頁.document.getElementsByTagName("table")
With Workbooks.Add
On Error Resume Next
'************************
' For ii = 0 To A.Length - 1 '不知道table範圍在何處: 從0開始
'************************
For ii = 11 To A.Length - 1
For i = 0 To A(ii).Rows.Length - 1
K = K + 1
For J = 0 To 8
Cells(K, J + 1) = A(ii).Rows(i).Cells(J).innerText
Next
Next
Next
'
If Dir(path & 代號 & ".xls") <> "" Then Kill (path & 代號 & ".xls")
ActiveWorkbook.SaveAs Filename:=path & 代號 & ".xls"
ActiveWindow.Close
End With
Set A = Nothing
網頁.Quit '打開的網頁,再次執行後會自動下載有table的資料,完成下載後,自動關閉已下載完成的IE網頁
Exit Sub
RE網頁:
Set 網頁 = Nothing
Resume 1
End Sub
複製代碼
作者:
wahaha6666
時間:
2014-11-21 21:00
還是沒辦法。就會卡在這一頁。進不去財務資訊業面
公司代號
公司名稱
2880 華南金
28800001 華南銀行
28800002 華南永昌
28800004 華南保
28800005 華南投信
28800006 華南金創
28800007 華南金管
28800008 華南金資
28800009 華銀保代
28800010 華南投顧
28800012 華永香港
28800013 華永資管
作者:
HSIEN6001
時間:
2014-11-22 00:13
回復
4#
wahaha6666
我執行沒問題喔! 可能你沒有搞懂流程
(針對有資料去執行,沒資料的直接關閉網頁,重新程序)
(1)執行程式 (第1次開啟網頁)
(2)網業開啟後......28800001要按下去,才會打開資料內容 (目前2880沒資料,點下去,沒資料就關閉網頁再重新程序)
(3)執行程式(第2次下載網頁表格)
(4)已經下載完成,並關閉網頁.
[attach]19635[/attach]
作者:
GBKEE
時間:
2014-11-23 15:39
本帖最後由 GBKEE 於 2014-11-23 16:02 編輯
回復
5#
HSIEN6001
試試看
Dim 網頁 As Object, Ar1 As String, xPath As String
Sub EX_自動()
Dim i As Integer, k As Integer, AR() As String, j As Integer
xPath = "d:\" '存檔位置,自己修正一下
Ar1 = ""
年度 = "103"
季期 = "3"
代號 = "2880"
Set 網頁 = CreateObject("InternetExplorer.Application")
With 網頁
'.Visible = True
.Navigate "http://mops.twse.com.tw/mops/web/t164sb04?'encodeURIComponent=1&step=1&firstin=ture&off=1&keyword4=&code1=&TYPEK2=&checkbtn=&queryName=co_id&TYPEK=all&isnew=false&co_id=" & 代號 & "&year=" & 年度 & "&season=" & 季期
Do While .Busy Or .readyState <> 4: DoEvents: Loop
If InStr(.Document.body.innertexT, "查無公司資料") Then
MsgBox 代號 & " : 查無公司資料!"
.Quit
End
End If
'**************** 讀取 金控股子公司名稱
With .Document.getElementsByTagName("TABLE")(11)
ReDim AR(1 To .Rows.Length - 1)
For i = 1 To .Rows.Length - 1
For j = 0 To .Rows(i).Cells.Length - 2
AR(i) = AR(i) & IIf(AR(i) <> "", "-", "") & .Rows(i).Cells(j).innertexT
Next
Next
End With
'*****************************
Set A = .Document.getElementsByTagName("INPUT")
i = 1
For E = 0 To A.Length - 1
If A(E).Value = "詳細資料" And A(E).Type = "button" Then
A(E).Click '有"詳細資料" 金控股子公司的按鈕
Do While 網頁.Busy Or 網頁.readyState <> 4: DoEvents: Loop
If InStr(.Document.body.innertexT, "查無") = 0 Then '金控股子公司有資料
IE_Table AR(i) '參數傳遞:金控股子公司的名稱
End If
For Each Img In .Document.getElementsByTagName("img")
'http://mops.twse.com.tw/mops/web/images/bu_05.gif 回上頁的圖片
If Img.href = "http://mops.twse.com.tw/mops/web/images/bu_05.gif" Then
Img.Click
Do While 網頁.Busy Or 網頁.readyState <> 4: DoEvents: Loop
Exit For
End If
Next
i = i + 1 '下一個 金控股子公司
End If
Next
.Quit
End With
MsgBox Ar1 & vbLf & "存檔 " & UBound(Split(Ar1, vbLf)) + 1 & " 個 完畢", , AR(1)
End Sub
Private Sub IE_Table(co_id As String)
Dim A As Object, i, k, j
Do
Set A = 網頁.Document.getElementsByTagName("table") '(12)
Loop Until Not A Is Nothing And A.Length >= 14
Set A = A(12)
With Workbooks.Add(1)
For i = 0 To A.Rows.Length - 1
k = k + 1
For j = 0 To A.Rows(i).Cells.Length - 1
.Sheets(1).Cells(k, j + 1) = A.Rows(i).Cells(j).innertexT
Next
Next
If Dir(xPath & co_id & ".xls") <> "" Then Kill (xPath & co_id & ".xls")
.SaveAs Filename:=xPath & co_id & ".xls"
.Close
End With
Ar1 = Ar1 & IIf(Ar1 <> "", vbLf, "") & co_id
End Sub
複製代碼
作者:
HSIEN6001
時間:
2014-11-23 22:54
回復
6#
GBKEE
太好了!!不用點選就完成 (謝謝!!
我得慢慢研究~研究~ ^^!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)