(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

snare wrote:
原始資料本來就沒有空...(恕刪)


看來代誌大條 不好搞了
大大的程式碼 我跑出來也是一樣的結果
經測試確定是Office版本的關係~~我的是2021版的用2016版本的就沒問題
但2016版的元大RTD又有問題
看來要取捨一下了~~XD
好奇大神的電腦配備是如何, 前一個yahoo分類只要跑8秒, 我卻跑了466秒~~OMG
好歹也是12代Intel怎麼差那麼多~~><
rainbowsperm wrote:
經測試確定是Office版本的關係~~我的是2021版的用2016版本的就沒問題
但2016版的元大RTD又有問題


我沒2021可以試,程式碼可以改成下面這樣試試
For i = 0 To UBound(temp)
If temp(i) <> "" Then
r = r + 1
Sheets("工作表1").Cells(r, 1) = temp(i)
End If
Next i



rainbowsperm wrote:
好奇大神的電腦配備是如何, 前一個yahoo分類只要跑8秒, 我卻跑了466秒~~OMG
好歹也是12代Intel怎麼差那麼多~~><


剛才把不要的零件,暫時拼一台文書測試機
因剛灌好win10,所以系統忙碌中
在ram不夠,傳統320G古董硬碟100%滿載
我沒等系統閒置就直接測試,模擬最慢的清況
大約是34秒跑完
系統閒置後再試,大約是10秒
這是古董零件的測試結果

測試時分類中的31、32沒下載
程式碼是比較慢的上色版(和1268樓只差在上色)












Snare大神:

我又來請益受教了,

想獲取https://www.moi.gov.tw/LocalOfficial.aspx?n=577&TYP=KND0007網址的[轉出Excel],

可是我看不出真正的Url,請您幫忙看一下,感謝萬分。Dylan

https://www.moi.gov.tw/LocalOfficial.aspx?n=577&TYP=KND0007
POST /LocalOfficial.aspx?n=577&TYP=KND0007 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 1794
Content-Type: application/x-www-form-urlencoded
Cookie: _ga_6LQ53RXLY4=GS1.1.1667027825.3.0.1667027825.0.0.0; twk_uuid_602cc3ef9c4f165d47c410fa=%7B%22uuid%22%3A%221.101ERTzed9H1owqTpsyhTcCyGb0YLiYx4tAsYykHCroBpU1FsRgqyzPSn8HsQwLm7GbxoZHxkliu3RrjEyk8cjkfRGGvWuTI1smaCkKwUi86wbpj5l6tfn4by73U7eFm2fpTgpplBnuCWw%22%2C%22version%22%3A3%2C%22domain%22%3A%22moi.gov.tw%22%2C%22ts%22%3A1667027826918%7D; ASP.NET_SessionId=qycezcmpxb0j4ojou4wkspn3; _gid=GA1.3.351884543.1667569955; font-size-=medium; _ga_SM8YJ6LKEQ=GS1.1.1667569955.1.1.1667572174.0.0.0; _ga=GA1.3.1715572498.1650787497
Host: www.moi.gov.tw
Origin: https://www.moi.gov.tw
Referer: https://www.moi.gov.tw/
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36

▼ 是不是跟這一行有關?
sec-ch-ua: "Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"

sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
n=577&TYP=KND0007
Dylan67 wrote:
▼ 是不是跟這一行有關?
sec-ch-ua


不是
下載方法同269樓

Sub Get_Moi_Gov_excel()

If ThisWorkbook.Path = "" Then
MsgBox "Save file First!!!", vbOKOnly, "Error"
Exit Sub
End If

Dim Xmlhttp As Object, HTML As Object, vs As String, vg As String, QCD_YEAR_ID As String, FileName As String, URL As String, n As String, TYP As String, ttt As Double
Set Xmlhttp = CreateObject("Microsoft.XMLHTTP")
Set HTML = CreateObject("htmlfile")

ttt = Timer

QCD_YEAR_ID = "EY00004" 'EY00004=107、EY00003、EY00002、EY00001
n = "577" ' 578 ... ...
TYP = "KND0007" ' KND0004 ... ...
URL = "https://www.moi.gov.tw/LocalOfficial.aspx?n=" & n & "&TYP=" & TYP


With Xmlhttp

.Open "GET", URL, False
.send

HTML.body.innerhtml = .responsetext

vs = HTML.getElementById("__VIEWSTATE").Value
vg = HTML.getElementById("__VIEWSTATEGENERATOR").Value

.Open "POST", URL, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "__VIEWSTATE=" & vs & "&QCD_YEAR_ID=" & QCD_YEAR_ID & "&QCD_CTY_ID=&QCD_OPT_DTL1=&QCD_LST_NAM=&QCD_FIR_NAM=&QCD_PTY_NAM=&JLocalOfficial_ExportXls=轉出Excel&__VIEWSTATEGENERATOR=" & vg & "&__VIEWSTATEENCRYPTED="
FileName = Split(.getresponseheader("Content-Disposition"), "=")(1)

End With

With CreateObject("ADODB.Stream")
.Type = 1
.Open
.write Xmlhttp.ResponseBody
.savetofile ThisWorkbook.Path & "\" & FileName, 2
.Close
'Workbooks.Open FileName:=ThisWorkbook.Path & "\" & FileName
End With

'Windows(FileName).Activate
'ActiveWindow.WindowState = xlMaximized

MsgBox ThisWorkbook.Path & "\" & FileName & vbNewLine & Timer - ttt & "s", vbOKOnly, "Report"

Set Xmlhttp = Nothing
Set HTML = Nothing

End Sub


Dylan67
一早醒來就有收到禮物的感覺,特感謝大神相助,並提示269F範例(是我疏忽了)。我比對了一下程式碼,要理解恐怕還得費點時日,故先回復已知悉,實在突破不了的知識點再向您討教,感恩。






[點擊下載]

Snare大神:

我今天彙整及研究了您的程式碼,想請教圖一URL主體的部分,是不是跟圖片上方的這段原始碼有關?

另想請您提點一下,我若是想先自習這段URL主體的程式碼,應該Google什麼關鍵字比較準確?

圖二及圖三是發現我點擊下載按鈕後,沒有出現像您畫面的[目標路徑],這是不是要在Google裡做什麼設定?

最後附件壓縮檔是我下載後的.xls檔,我發現這個檔案內容其實挺少的,可是檔案很大,

尤其是下載後開啟及針對單元格的操作都很慢,

我嘗試過修改副檔名成xlsx,及97-2003另存新檔xlsx,可是都沒有用,您知道是為什麼嗎?

麻煩您了,感恩。Dylan
Dylan67 wrote:
我今天彙整及研究了您的程式碼,想請教圖一URL主體的部分,是不是跟圖片上方的這段原始碼有關?



真實網址,通常是出現要抓的資料前,在網頁上所做的最後一個動作
因為上面method=post,所以需要下面的參數
類似鑰匙=>開門

post



參數




Dylan67 wrote:
我若是想先自習這段URL主體的程式碼,應該Google什麼關鍵字比較準確?


抓網頁、爬蟲、fiddler 抓包、真實網址……
改英文搜尋的話,資料更多


Dylan67 wrote:
圖二及圖三是發現我點擊下載按鈕後,沒有出現像您畫面的[目標路徑],這是不是要在Google裡做什麼設定?


單純瀏覽器內建的功能
maxthon、cent borwser... 等等都有

chrome,是顯示在下載裡面,或是去下載可顯示真網網址的擴充功能




Dylan67 wrote:
最後附件壓縮檔是我下載後的.xls檔,我發現這個檔案內容其實挺少的,可是檔案很大,
尤其是下載後開啟及針對單元格的操作都很慢,
我嘗試過修改副檔名成xlsx,及97-2003另存新檔xlsx,可是都沒有用,您知道是為什麼嗎?


只是格子少,但內容很多,大約94萬個字
再加上有格式、字型…等等的設定,慢是正常的





全選複製=>貼到新檔的工作表上=>選貼上(值)
所有格式都不要,可改善速度
Dylan67
感恩您的即時回復,我還是不夠細心(或不能舉一反三),不過,每每有您的提點幫助,問題總是迎刃而解,我再自己研究一下,看有沒有機會豁然開朗,祝您好眠。
snare wrote:
對真實網址,通常是出...(恕刪)


剛想入門網路爬蟲的小白,備份一下.
Snare大神:

附件主要是利用您的程式碼,但改成了剪貼簿方式處理,可是不成功,

Clipboard.SetText convertraw(Xmlhttp.responsebody)

Clipboard.PutInClipboard

Application.Goto Sheets(1).Range("A1")

ActiveSheet.PasteSpecial NoHTMLFormatting:=True

我參考了您提示223F的教學,

將 xls 改成 xml,但還是不成功,

想請教,這個下載的檔案有什麼特別之處,

是不是限制不能在背景開啟,謝謝。Dylan

[點擊下載]
Dylan67 wrote:
將 xls 改成 xml,但還是不成功,
想請教,這個下載的檔案有什麼特別之處,



https://www.moi.gov.tw/LocalOfficial.aspx?n=577&TYP=KND0007
下載的檔案是“”excel xls檔案

如果不是用excel打開,內容如下





xls 改 xml 可以,那是因為“” xml檔案,只是被改成xls
如果不是用excel打開,內容如下



至於為什麼上一張圖,裡面那些html語法、內容
可以用clipboard貼上excel,顯示出正確的內容
那是因為excel 支援 xml、網頁格式,會自動轉換,所以可以正常打開
.PasteSpecial NoHTMLFormatting:=True 不要網頁格式,只留文字
.PasteSpecial NoHTMLFormatting:=false 保留網頁格式

csv、txt 檔也都可以用clipboard





簡單的說,下載的檔案,如果不存檔,要直接用clipboard
至少要先在筆記本測試(或其它純文字編輯軟體)
如果可以正常打開、看到內容的檔案,就可以用clipboard
顯示亂碼的那種不行(如第一張圖)
Dylan67
謝謝您的指導,我大概半猜半懂,也就是剪貼簿接受純文本的格式(比方csv、txt、xml...,但如果是"真"xls,那就只能下載後保存檔案、開啟,再擷取資料,而不能在背景處理,這樣對嗎?
snare
是的,如果不想看見要背景處理,可用CreateObject("Excel.Application")物件,設成隱藏,或是全部改用python、java處理
Snare 大神您好,小弟在您的引領下,初入 EXCEL VBA 的世界,學了一些皮毛,受用頗多,趁機藉此致謝。

最近在研究的網站中,發現一個不知道要怎麼爬資料的網站 (完全沒有頭緒),特來請教大神,懇請指點方向~

網站:阿股達的「大戶散戶」頁面



想要抓下圖紅框區 (簡稱 A區) 的資料:




個人的分析及判斷:

1) Chrome + 開啟 Javascript

- 網頁:A區 的內容有顯示
- 網頁原始碼 ( view-source:https...),並沒有看到 A區 相關的內容

2) Chrome + 關掉 Javascript

- 網頁:A區 的內容沒有顯示
- 應該是由 js 另外產生 A區內容

3) 使用 Chrome 的開發人員工具 -> Network -> Fetch / XHR

- Reload 頁面,發現 eqc.js。
- 故意 Block eqc.js 會造成 A區內容不顯示。
- 但是,Preview eqp.js 並非 json 之類的資料,也看不到跟 A 區相關的內容
- 找不到 A區的主要封包...



想請教大神,是小弟的方向錯了嗎?還是遺漏了什麼?懇請指點,感謝您~
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 157)

今日熱門文章 網友點擊推薦!