Board logo

標題: 想要優化網路爬取選股網站資料 [打印本頁]

作者: vuptp6    時間: 2021-7-14 15:09     標題: 想要優化網路爬取選股網站資料

一直都是用 Excel 內建的 Web 連線功能抓取網站的數據資料
把要的個股如2330
從2021年1月1日到2021年7月13日的法人買賣超
更改券商的網頁
https://fubon-ebrokerdj.fbs.com.tw/z/zc/zcl/zcl.djhtm?a=2330&c=2021-1-1&d=2021-7-13
就能抓到2330這個區間的資料
可是爬出來的資料還很多是我不想要的文字及欄位
都要再經過程式搜尋或著對該爬下來的欄或列直接刪除
才會剩下我想要的資料

該網頁我純粹只要
"日期"
"外資的買賣超"
"投信的買賣超"
"外資的估計持股"
"投信的估計持股"

是否有可能直接就抓取這些欄位就好?

看了該網頁的原始碼
view-source:https://fubon-ebrokerdj.fbs.com.tw/z/zc/zcl/zcl.djhtm?a=2330&c=2021-1-1&d=2021-7-13
在188行開始有看到我想要的資料
有辦法直接從這開始抓取嗎??
作者: singo1232001    時間: 2021-7-14 17:07

本帖最後由 singo1232001 於 2021-7-14 17:15 編輯

回復 1# vuptp6
作者: quickfixer    時間: 2021-7-15 13:52

本帖最後由 quickfixer 於 2021-7-15 14:02 編輯

回復 1# vuptp6

執行test
    Sub test()
    Dim getxml As Object, url As String, temp, t As Double
    t = Timer
    Set getxml = CreateObject("msxml2.xmlhttp")
    url = "https://fubon-ebrokerdj.fbs.com.tw/Z/ZC/ZCL/CZCL3.DJBCD?A=2330&B=Y"
    getxml.Open "GET", url, False
    getxml.send
    temp = Split(getxml.responsetext, " ")
    Application.ScreenUpdating = False
    Cells.Clear
    For i = 1 To 5
    Call col(i, Split(temp(Choose(i, 0, 5, 6, 2, 3)), ","))
    Next i
    Set getxml = Nothing
    Range("f1") = Timer - t & "秒"
    Application.ScreenUpdating = True

End Sub

Sub col(c, temp)
    r = 1
    For j = UBound(temp) To 0 Step -1
    r = r + 1
        If c = 1 Then Cells(r, c) = "'" & temp(j) Else Cells(r, c) = temp(j)
    Next j
End Sub
作者: vuptp6    時間: 2021-7-15 15:20

回復 2# singo1232001
回復 3# quickfixer


謝謝singo1232001及quickfixer兩位的幫助
因為本人技術不夠能力也不足實在看不懂兩位前輩寫的內容(難過)
說實在的其實每一行都看不懂
quickfixer您可以跟我說明網址怎麼由
https://fubon-ebrokerdj.fbs.com.tw/z/zc/zcl/zcl.djhtm?a=2330&c=2021-1-1&d=2021-7-13
變成
https://fubon-ebrokerdj.fbs.com.tw/Z/ZC/ZCL/CZCL3.DJBCD?A=2330&B=Y

我是不是要放棄網路爬資料
資料庫及網頁的知識我完全沒有
作者: quickfixer    時間: 2021-7-15 15:44

回復 4# vuptp6

[attach]33650[/attach]

是從 chrome F12 追踨到的資料來源網址

每一行都看不懂,那你可能要從vba入門學習,加油:)
作者: vuptp6    時間: 2021-7-16 09:39

回復 5# quickfixer

謝謝你
vba我只會基本的儲存格的控制複製等等
從網頁、網路抓取完全一竅不通甚麼js,xhmal等等的
之前都是用錄製
可是抓取下來的效率不太好

另外提問
https://fubon-ebrokerdj.fbs.com.tw/Z/ZC/ZCL/CZCL3.DJBCD?A=2330&B=Y
這個網址從該券商的伺服器抓出來的資料
我怎麼改日期區間都是從110/01/13開始
例如
https://fubon-ebrokerdj.fbs.com.tw/z/zc/zcl/zcl.djhtm?a=2330&c=2019-1-1&d=2019-12-31
他一樣是給這個網址
https://fubon-ebrokerdj.fbs.com.tw/Z/ZC/ZCL/CZCL3.DJBCD?A=2330&B=Y
資料並非從2019年(108)開始

若是這個網頁
https://stock.wearn.com/cdata.asp?Year=110&month=07&kind=2330
似乎不能套用該方法
能否指導其他方式擷取
作者: quickfixer    時間: 2021-7-16 14:30

回復 6# vuptp6


    Sub fubon()
   
    Dim URL As String, Html As Object, GetXml As Object, table, i As Integer, j As Integer, t As Double
    Cells.Clear
    t = Timer
    Application.ScreenUpdating = False
    Set Html = CreateObject("htmlfile")
    Set GetXml = CreateObject("msxml2.xmlhttp")
    URL = "https://fubon-ebrokerdj.fbs.com.tw/z/zc/zcl/zcl.djhtm?a=2330&c=2019-1-1&d=2019-12-31"
   
    With GetXml
        .Open "GET", URL, False
        .send
        Html.body.innerhtml = .responsetext
        Set table = Html.all.tags("table")(2).Rows
        For i = 1 To table.Length - 1
            For j = 0 To table(i).Cells.Length - 2
                Cells(i, j + 1) = Trim(table(i).Cells(j).innertext)
            Next j
        Next i
    End With
    Rows("1:5").Delete Shift:=xlUp
    Range("D:D,E:E,H:H,I:I,J:J").Delete Shift:=xlToLeft
    Application.ScreenUpdating = True
    Range("f1") = Timer - t & "秒"
    Cells.Columns.AutoFit
    Set Html = Nothing
    Set GetXml = Nothing
        
End Sub


stock.wearn.com 改2行,刪除列欄不要,亂碼用文字蓋過就好,其餘同上

URL = "https://stock.wearn.com/cdata.asp?Year=110&month=07&kind=2330"
Set table = Html.all.tags("table")(0).Rows
作者: quickfixer    時間: 2021-7-16 18:33

回復 7# quickfixer


    stock.wearn.com 漏改一行
.Cells.Length - 2  改 .Cells.Length - 1
作者: vuptp6    時間: 2021-7-20 10:45

回復 8# quickfixer


謝謝
看樣子還有很多要學習的
我再研究看看




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)