返回列表 上一主題 發帖

[發問] 網頁資料下載成pdf異常地慢?

[發問] 網頁資料下載成pdf異常地慢?

使用最普遍的方法Microsoft.XMLHTTP +ADODB.STREAM
下載 https://mm.jpmorgan.com/OpenPubServlet?action=latest&publication=9000024 的pdf檔
但是速度卻驚人的慢... 接近30秒
用相同方法下載其他資料 如 http://ichart.finance.yahoo.com/table.csv?s=2498.TW&d=4&e=10&f=2013&g=d&a=2&b=26&c=2002&ignore=.csv
只需要一瞬間(因為檔案格式的關係嗎? pdf v.s. csv)
雖然有下載成功 可是其中發生了什麼問題 能改善嗎?
謝謝!
  1. Sub download1()
  2. 'On Error Resume Next
  3. DataDate = Year(Date) & "-" & Format(Month(Date), "00") & "-" & Day(Date)
  4. myURL = "https://mm.jpmorgan.com/OpenPubServlet?action=latest&publication=9000024"


  5. Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
  6. WinHttpReq.Open "GET", myURL, False
  7. WinHttpReq.Send

  8. myURL = WinHttpReq.ResponseBody
  9. If WinHttpReq.Status = 200 Then
  10.     Set oStream = CreateObject("ADODB.Stream")
  11.     oStream.Open
  12.     oStream.Type = 1
  13.     oStream.Write WinHttpReq.ResponseBody
  14.     oStream.SaveToFile ("D:\Dropbox\Stock\Research Reports\JPM Top Stories\JPM_J.P._Morgan_FTM_10_M_" & DataDate & ".pdf")
  15.     oStream.Close
  16. End If
  17. 'On Error GoTo 0

  18. End Sub
複製代碼

使用最普遍的方法Microsoft.XMLHTTP +ADODB.STREAM
下載 https://mm.jpmorgan.com/OpenPubServlet?action= ...
lalalada 發表於 2013-5-10 22:05



    格式不同.... 當然慢...
    嚴格來說... PDF 不算是文件檔案...  只能算半圖文檔...  雖然可以藉由軟體加以擷取..
    同樣大小的圖片和文字  基本上  圖片傳輸速度會遠低於 文字傳輸速度...  當中的原因 可以自己想想...

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 2# mark15jill

感謝回復!
那請問有沒有辦法能改善這現象呢?

而且我注意到如果重複跑程式碼
第二次之後就能達到瞬間執行完畢@@

TOP

回復  mark15jill

感謝回復!
那請問有沒有辦法能改善這現象呢?

而且我注意到如果重複跑程式碼
第二 ...
lalalada 發表於 2013-5-13 23:36


如果是 第二次跑  瞬間跑完的話  那有可能是 暫存傳輸的問題...
暫存傳輸的意思就是說
A電腦 要從 B平台下載東西
從B取得資料頁面後,A的電腦會先以暫存的方式 將檔案留存下來,在正式下載的時候,速度就會稍微快...
這問題 會牽連到  網速 和 電腦CPU ....
改善方法... 重複跑兩次.. 第一次遮蔽.. (消極!)

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 4# mark15jill

了解~
感謝指教:)
請問...重複跑兩次(遮蔽第一次)是什麼意思(?)
這樣跑第一次的時候還是要一樣久不是嗎?
既然網址都一樣
有沒有辦法把暫存檔留下來呢?

TOP

回復 5# lalalada


    網址有兩種
一種是 標題列那邊的網址
另外一種是' 文件的網址
雖然有時候  第一種網址 是相同   可是  裡面的連結網址會不同
所以 暫存檔不會是相同~~
舉例來說
麻辣家族討論區的網址為 http://forum.twbts.com/
裡面的文章列 又會是另外一種網址
而 如果有附件下載  又會是另外一種

至於方法...
那個還沒研究ˇˇ 抱歉

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

使用〔XMLHTTP〕語法,有時會有如下狀況:
第1次執行慢 > 類似從傳真機接收〔正本〕文件的〔副本〕,從〔無〕到〔有〕,總是要等些時間
第2次以後執行快 > 只是拿到〔傳真副本〕的〔影印本〕
如果〔正本〕每天更新,還是必須重新執行傳真動作,取得最新的〔副本〕,耗費的時間相同,
假如每次下載都是要取得最新版本資料,若下載速度異常的快,必須去確認是否為最新!

在某些PC上,即使關掉網路連線,還是可以下載文件,因為〔傳真副本〕還在暫存區,抓到的文件,有人形容為〔鬼影〕!
網上去查一下〔GET〕及〔POST〕的差別,但改用〔POST〕有時還是不夠精確!

以上純為個人實作經驗,並非一定是如此,僅供參考!

TOP

回復 7# 准提部林

你好! 感謝回覆
我大概會用POST跟GET兩種方法取得資料
個人理解POST是有發出訊息給對方伺服器
伺服器再根據訊息給予對應的資料
GET則是單純存取
請問這樣的理解正確嗎?
又POST不精確的意思是什麼...?

TOP

回復 6# mark15jill

你好~感謝回覆!
我也有注意到網址結尾並不是PDF
請問有沒有辦法得到文件的真實位址呢?

TOP

<測試碼>
Sub 測試_1()
Dim QcURL$, uTxt$, X1&, X2&
On Error GoTo 101
QcURL = "http://www.post.gov.tw/post/internet/index.jsp"
With CreateObject("Microsoft.XMLHTTP")
     .Open "post", QcURL, False
     .send
     uTxt = .ResponseText
End With
'---------------------------
T1 = "台灣時間:</span> <span class='time'>"
T2 = "GMT+8:00  "
X1 = InStr(uTxt, T1)
If X1 > 0 Then X2 = InStr(X1 + Len(T1), uTxt, T2)
If X2 = 0 Then Exit Sub
uTxt = Mid(uTxt, X1 + Len(T1), X2 - X1 - Len(T1))
'---------------------------
uTxt = Replace(Replace(uTxt, "&nbsp", ""), ";", "")
If Len(uTxt) = 0 Then Exit Sub
[A65536].End(xlUp)(2) = uTxt
101: End Sub

請再複製一份,改為〔Sub 測試_2()〕,且將〔post〕改為〔get〕!

檢測執行:
1.先執行幾次〔測試1〕,看文字串後面的時間是否有更新?__102年5月19日星期日12:52:24
2.再執行幾次〔測試2〕
3.接著再執行〔測試1〕

以我的PC測試:
在未執行GET前,POST都可以取得最新時間;執行GET後,後續都是抓到舊時間,即使再返回執行POST也是一樣!
不過您的PC並不一定如此,參考即可!

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題