返回列表 上一主題 發帖

[發問] 有大大能找到鉅亨網的隱藏網址嗎?以及網頁元素問題

[發問] 有大大能找到鉅亨網的隱藏網址嗎?以及網頁元素問題

本帖最後由 PKKO 於 2016-10-7 15:29 編輯

http://www.cnyes.com/twstock/ps_historyprice/3514.htm
網址裡面有一個開始跟結束日期
請大大們教導如何找出隱藏的網址,可以直接從網址當中控制起迄日期
這樣就可以直接用錄製巨集的方式下載(感覺這種方式比較穩定)

我目前使用網頁元素可以控制起迄日期,但碰到一個問題
當提出查詢按鈕的時候,無法得知網頁何時跑完
導致網頁還沒跑完,程式碼已經繼續往下執行了
這樣會導致資料是(案下查詢按鈕之前的資料)
  1. Sub testDL()   '下載股票資訊
  2. Set ie = CreateObject("InternetExplorer.Application")
  3. ie.Visible = True
  4. ie.Navigate "http://www.cnyes.com/twstock/ps_historyprice/" & "3514" & ".htm"
  5. Do While ie.readyState <> 4: DoEvents: Loop
  6. st_date = "2016/01/01"
  7. With ie.Document
  8.     '開始日期
  9.     For Each E In .GetElementsByTagName("INPUT")
  10.         If E.ID = "ctl00_ContentPlaceHolder1_startText" Then
  11.             E.Value = st_date: Exit For
  12.         End If
  13.     Next
  14.     '查詢按鈕
  15.     Do While ie.readyState <> 4 Or ie.Busy: DoEvents: Loop
  16.     For Each E In .GetElementsByTagName("INPUT")
  17.         If E.ID = "ctl00_ContentPlaceHolder1_submitBut" Then
  18.             E.Click: Exit For
  19.         End If
  20.     Next
  21.     '=================================下載資料=================================
  22.     Do While ie.readyState <> 4 Or ie.Busy: DoEvents: Loop'這行程式碼無效,無法真的等待網頁執行時間
  23.     MsgBox "網頁實際上還沒完成!導致下載的資料是舊的"
  24. End With
  25. ie.Quit
  26. End Sub
複製代碼
PKKO

http://www.cnyes.com/twstock/ps_historyprice/3514.htm
網址裡面有一個開始跟結束日期
請大大們教導如何 ...
PKKO 發表於 2016-10-7 15:27


真的要股價資料要從證交所與OTC下載放進資料庫中,直接查你要的股票與日期,快又不用等待,每天下載一次,自己本地端查快要有效率,完全不用考慮網頁資料的問題

TOP

本帖最後由 PKKO 於 2016-10-7 19:28 編輯

回復 2# joey0415


不曉得大大說的是以下兩個網站嗎?證交所與櫃買中心
因為我需要的是一次下載n個月的資料
我有寫過自動下載,但不堪其擾...

一、必須要區分上櫃與上市
二、資料都是以月為單位,速度更慢
三、無法直接透過網址來截取資料,因為有些特別年月會第一次無法讀取,第二次執行才可以讀取
四、相同也是以網頁元素來取得資料,但遊戲規則還會時常變更

http://www.tpex.org.tw/web/stock/aftertrading/daily_trading_info/st43.php?l=zh-tw
http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY_AVG/STOCK_DAY_AVGMAIN.php
PKKO

TOP

回復 2# joey0415


    目前網路下載最快的是YAHOO的資料,但YAHOO的資料一堆錯誤的
只有找到鉅亨網似乎是不錯的下載網站
PKKO

TOP

回復 3# PKKO

這兩個網站沒錯,不過請你下載每天的盤後交易檔,不是月檔

一年250天,五年才1250次

上市加上櫃 共2500次,你會爬下來,一秒一次,一小時就全部抓下來了

這兩個網站才有正確的資料,其它網站都會有停機與資料不正確的問題

鉅亨你爬1000次看看,你就知道資料下載會有問題,網頁的快慢不是靠爬蟲就能解決

這兩個網站不會檔爬蟲

TOP

本帖最後由 ketrddem 於 2016-10-8 01:57 編輯

不要用網頁元素來抓,直接用匯入就好了 歷史股價.rar (47.72 KB)

開啟後,把你想抓的歷史股價輸入到「清單」的第一欄
然後按「重建歷史股價」
你要的就幫你抓好囉
EXCEL VBA新手,請前輩多多指教

TOP

回復 1# PKKO

試試看
  1. Option Explicit
  2. Sub testDL()   '下載股票資訊
  3.     Dim IE As Object, st_date As String, xTable As Object, R As Integer, C As Integer
  4.     st_date = "2016/02/01"
  5.     Set IE = CreateObject("InternetExplorer.Application")
  6.     IE.Visible = True
  7.     IE.Navigate "http://www.cnyes.com/twstock/ps_historyprice/" & "3514" & ".htm"
  8.     Do While IE.readyState <> 4: DoEvents: Loop
  9.     With IE.Document
  10.         R = .ALL.tags("table")(1).Rows.Length ' '**資料數(含表頭): 網頁預設顯示為一個月的資料
  11.         '開始日期
  12.         ' ************* 有ID 可直接用ID的名稱********
  13.         .GetElementByid("ctl00_ContentPlaceHolder1_startText").Value = st_date
  14.         Do While IE.readyState <> 4 Or IE.Busy: DoEvents: Loop
  15.         'For Each E In .GetElementsByTagName("INPUT")
  16.         '    If E.ID = "ctl00_ContentPlaceHolder1_startText" Then
  17.         '        E.Value = st_date: Exit For
  18.         '    End If
  19.         'Next
  20.         '查詢按鈕
  21.         .GetElementByid("ctl00_ContentPlaceHolder1_submitBut").Click
  22.         'For Each E In .GetElementsByTagName("INPUT")
  23.         '    If E.ID = "ctl00_ContentPlaceHolder1_submitBut" Then
  24.         '        E.Click: Exit For
  25.         '    End If
  26.         'Next
  27.         '=================================下載資料=================================
  28.         Do While IE.readyState <> 4 Or IE.Busy: DoEvents: Loop    '這行程式碼無效,無法真的等待網頁執行時間

  29.         Do
  30.             DoEvents
  31.             Set xTable = .ALL.tags("table")(1)
  32.             If xTable.Rows.Length <> R And xTable.Rows.Length > 1 Then Exit Do ''** 等候資料日數等於指定的日數
  33.             ' 等後資料下載時: xTable.Rows.Length=1
  34.         Loop
  35.         '=================================下載資料=================================
  36.         With ActiveSheet
  37.             .UsedRange = ""
  38.             For R = 0 To xTable.Rows.Length - 1
  39.                 For C = 0 To xTable.Rows(R).Cells.Length - 1
  40.                     .Cells(R + 1, C + 1) = xTable.Rows(R).Cells(C).innertext
  41.                 Next
  42.             Next
  43.         End With
  44.         MsgBox "資料下載完成!"
  45.     End With
  46.     IE.Quit
  47. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 joey0415 於 2016-10-8 12:04 編輯

回復 6# ketrddem

大大的回答真棒!

請問一下
.PostText = "ctl00$ContentPlaceHolder1$startText=" & 查詢起始日

中加入結束日期ctl00$ContentPlaceHolder1$endText,好像不會跳動

這個方法好向不用再加那一串的__EVENTVALIDATION是嗎?

在WITH中最後加上.DELETE,就可刪除連線

TOP

回復 6# ketrddem
ketrddem 大大,您好厲害耶,用下載的方式又快又穩,即便錯誤也不會中斷= =好多問題想向大大請教
一、與joey0415大大問題相同,下列程式碼無法運作,當多重條件的時候要如何輸入?
  1. With QT
  2. .PostText = "ctl00$ContentPlaceHolder1$startText=" & "2016/01/01"
  3. .PostText = "ctl00$ContentPlaceHolder1$endText=" & "2016/05/01"
  4. .WebTables = "2"
  5. .Refresh False
  6. .Delete
  7. End With
複製代碼
二、用下載的方式資料一定要先放在EXCEL上面嗎?可否直接輸出到陣列上面?
三、您如何找到該字串的?

為何不是輸入B欄位的ID字串而是輸入C欄位的NAME字串?網頁都是輸入NAME字串嗎?
四、只要是輸入變數都是使用.PostText 這個指令嗎?還是有何變化
五、或許小弟問題太多造成您困導,請問可以在哪邊找到關於下載的詳細相關方法呢?

以上麻煩大大了,再次提出萬分感激
PS:大大根本不是VBA新手,您應該要把簽名檔換掉了><"
PKKO

TOP

回復 7# GBKEE
超版大大您好,小弟找不到這段程式碼的資料
  1. Set xTable = .all.tags("table")(1)
複製代碼
從區域變數當中,不曉得這個.all.tags("table")在哪邊= =


小弟太嫩了,還請指教,網頁元素也是跟超版大大學習的
但這個.all.tags("table")以前完全沒看過@@
PKKO

TOP

        靜思自在 : 【是否發揮了良能?】人間壽命因為短暫,才更顯得珍貴。難得來一趟人間,應問是否為人間發揮了自己的良能,而不要一味求長壽。
返回列表 上一主題