Board logo

標題: [發問] ACCESS網頁上抓取資料 [打印本頁]

作者: jayer    時間: 2012-4-19 15:44     標題: ACCESS網頁上抓取資料

以下的程式碼是在版上看到的
請問各位大大有可能直接把資料存入ACCESS嗎
感謝

Sub 簡易明細下載()
    Dim 股票代號 As String, 日期 As Variant, N, i As Integer, A, T As Date
    Do While Not IsDate(日期)
        日期 = InputBox("輸入查詢日期", "日期", Date)
        If 日期 = "" Then End
    Loop
    Do While 股票代號 = ""
        股票代號 = InputBox("股票代號", "輸入查詢之股票代號", "1101")
        If 日期 = "" Then End
    Loop
    日期 = Format(日期, "yyyymmdd")
    T = Time
    With ActiveSheet
        For Each N In .Names
            N.Delete
        Next
        .Cells.Clear
        Application.StatusBar = False
        On Error GoTo A_Wait
        i = 1
        Do
            .Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
            With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=" & i, Destination:=Selection)
                .Name = 日期 & "_" & 股票代號 & "_" & i
                .WebSelectionType = xlSpecifiedTables
                .WebFormatting = xlWebFormattingNone
                .WebTables = "6"
                .WebPreFormattedTextToColumns = True
                .WebConsecutiveDelimitersAsOne = True
                .WebSingleBlockTextImport = False
                .WebDisableDateRecognition = False
                .WebDisableRedirections = False
              ''''''無法查詢時稍待  到  A_Wait: '''''
                .Refresh BackgroundQuery:=False
                If Application.CountA(.ResultRange) = 0 Then GoTo Out
                i = i + 1
            End With
            A = CreateObject("WScript.Shell").popup("請等後下載..." & Chr(10) & Chr(10) & "** 請勿按下  [確定] **", 4, 日期 & "_" & 股票代號 & "  第" & i & "頁", 16 * 3 + 0)
            Application.ScreenUpdating = True
        Loop
Out:
        .UsedRange.Columns.AutoFit
        .[A1].Select
        A = CreateObject("WScript.Shell").popup("共下載" & i & "頁", 5, 日期 & "_" & 股票代號, 48 + 0)
        Application.StatusBar = 股票代號 & " 共下載 " & i & "頁 費時 " & Format(Time - T, "HH:MM:SS")
    End With
    End
A_Wait:
    Application.StatusBar = "無法查詢等候5秒鐘"
    Application.Wait Now + TimeValue("00:00:05")
    Err.Clear
    Application.StatusBar = False
    Resume    '重返查詢
End Sub
作者: HSIEN6001    時間: 2012-4-19 23:14

回復 1# jayer
不好意思!想請問
統計券商個股進出量,可以做甚麼樣的分析!
作者: HSIEN6001    時間: 2012-4-19 23:45

本帖最後由 HSIEN6001 於 2012-4-19 23:47 編輯

回復 1# jayer


    剛剛下載看一下格式,應該沒問題
但我不會語法,只會用Access提供的巨集簡單操作

笨方法:先匯入成為新資料表,用查詢分成兩個區塊匯出

再同時匯入指定資料表格內

現在很晚了!
若你不介意我用笨方法,明天幫你放上來
作者: HSIEN6001    時間: 2012-4-19 23:46

忘了附上圖片
如下:
[attach]10517[/attach]
作者: HSIEN6001    時間: 2012-4-20 00:56

回復 1# jayer

我肯定是瘋了!居然會睡不著
乾脆弄好給你

直接開Access
按下已經設定的巨集就完成了

[attach]10521[/attach]
作者: jayer    時間: 2012-4-20 09:04

感謝HSIEN6001
不好意思,我只想知道個股他在某一段時間內在個券商的進出狀況
目前也不知道有沒有用
不過相信如果會分析應該用有點用吧
可以麻煩您寄給我嗎
我不能下載
感謝
mail:[email protected]
作者: HSIEN6001    時間: 2012-4-20 10:33

回復 6# jayer

券商個股進出資料匯入Access範例
    已經幫你mail 囉!

算是個簡單的笨方法,參考!
請依自己的需求再改過
作者: HSIEN6001    時間: 2012-4-20 10:42

回復 6# jayer

資質駑鈍,看不出統計之後;對交易分析有何幫助!
若有先進可提供分享
不勝感激!
:loveliness:
作者: jayer    時間: 2012-4-22 19:38

目前看書找到一個程序
程式碼如下是可以慢慢的將資入轉進資料庫裡喔
請問有大大有更好的方法嗎


Public Sub 執行SQL敘述()

    Dim cnnDB As New ADODB.Connection '建立資料庫連結物件
   
    Set cnnDB = CurrentProject.Connection '取得資料庫連結
   
    cnnDB.Execute " INSERT INTO 矽統的複本 " _
        & "SELECT * " _
        & "FROM [sheet2];"
           
    '執行SQL敘述
   
    cnnDB.Close '關閉資料庫連結
   
    Set cnnDB = Nothing '重設資料庫連結
   
End Sub
作者: white5168    時間: 2012-4-29 13:58

請問HSIEN6001

能否也寄一份 券商統計.rar 給我
我的 mail : [email protected]
Thanks.
作者: losson    時間: 2012-5-30 00:55

回復 5# HSIEN6001
能否也寄一份給我,權限不夠沒辦法下載
最近要進行相關的教學,正在苦惱中
謝謝
[email protected]
作者: HSIEN6001    時間: 2012-5-30 10:42

本帖最後由 HSIEN6001 於 2012-5-30 10:48 編輯

回復 11# losson

檔案刪了,沒留
而且那檔案只是提供概念,如四樓的圖檔,分成兩區塊查詢--->以相同欄位名稱
匯出兩個檔案後,再重新匯入一個新表格即可
使用者必須自行在查詢中設定篩選,把空白or多餘欄位去掉

Access匯入:
DoCmd.TransferText acImportDelim, "TEST 匯入規格", "資料表檔名", CurrentProject.Path & "\TEST.txt",True     '※ True(有欄位名稱)False(無欄名稱)
DoCmd.TransferSpreadsheet acImport, "規格代號", "資料表檔名", 路徑\檔名.格式, True                                   '※ True(有欄位名稱)False(無欄名稱)

Access查詢匯出:
DoCmd.OutputTo acQuery, "查詢表檔名", 8, "路徑\檔名.xls", False        '※  False匯出查表.xls不開啟,True匯出後開啟文件


也可以在Excel表格中先處理好,再匯入Access
作者: 048101    時間: 2012-12-4 14:37

With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_
是屬於Excel下載查詢﹐Access不能用
作者: 048101    時間: 2012-12-4 14:39

在Access中可用Microsoft.XMLHTTP下載﹐如下列
   Dim MSXML As Object
   Set MSXML = CreateObject("Microsoft.XMLHTTP")
   strWebsite="http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=20121203&StartNumber=1101"
   MSXML.Open "GET", strWebsite, False
   MSXML.SetRequestHeader "Content-type", "text/xml"
   MSXML.send
作者: chhou    時間: 2013-12-3 18:17

正好是我想要找的, 感謝你無私的分享
作者: heavenweaver    時間: 2014-3-1 23:31

回復 14# 048101
提供的URL不Work,試試我的範例,輸出為html格式。
僅針對2330台積電測試(PageCount=13),其他股票需設定PageCount,可上網查一下上市買賣日報表查詢下載的相關程式技巧。

Option Compare Database
Sub Test()

   Dim MSXML As Object
   Set MSXML = CreateObject("Microsoft.XMLHTTP")
   fh = FreeFile
   'strWebsite = "http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=20140227&StartNumber=2330"
   strWebsite = "http://bsr.twse.com.tw/bshtm/bsMenu.aspx?HiddenField_page=PAGE_BS&HiddenField_spDate=&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTQzNzI3ODE3MQ9kFgICAQ9kFhQCBQ8WAh4JaW5uZXJodG1sBQoyMDE0LzAyLzI3ZAIGDxYCHwAFCDIwMTQwMjI3ZAIIDw8WBh4JRm9udF9Cb2xkZx4EXyFTQgKEEB4JRm9yZUNvbG9yCj1kZAIKD2QWBAIBDw9kFgIeB09uQ2xpY2sFHGphdmFzY3JpcHQ6YnV0Q2xlYXJfQ2xpY2soKTtkAgcPFgIeBXN0eWxlBQlkaXNwbGF5OjsWAmYPZBYCZg9kFgICAQ8WAh8ABQIxM2QCDA8PFgYfAWgfAgKEEB8DCkdkZAIODw8WAh4HVmlzaWJsZWhkZAIQDw8WBh8BaB8CAoQQHwMKR2RkAhIPFgIfAGVkAhQPFgIfAGVkAhUPFgIfAAUCMTNkZJhG1J6ISYtK7kIpEfImJdIAAAAA&__EVENTVALIDATION=%2FwEWCQLryNa%2BCwLjpuXcAwKN4Ij0CwLB5ZfoCQLjk6TKBwKY8en5CwLdkpmPAQL6n7vzCwLAhrvLBScjE4xZjzHjsp%2FT1DwVl9MAAAAA&HiddenField_spDate=20140227&HiddenField_page=PAGE_BS&txtTASKNO=2330&hidTASKNO=2330&btnOK=%E6%9F%A5%E8%A9%A2"
   MSXML.Open "POST", strWebsite, False
   strWebsite = "http://bsr.twse.com.tw/bshtm/bsContent.aspx?StartNumber=2330&FocusIndex=All_13"
   MSXML.Open "GET", strWebsite, False
   MSXML.SetRequestHeader "Content-type", "text/xml"
   MSXML.send
   strpageContent = MSXML.responseText
   ' Save html as text/xml
   Open "C:\myStock\AccessVBA-2330.txt" For Output As #FreeFile
   Print #fh, strpageContent
   Set MSXML = Nothing
   Close #fh
   
End Sub
作者: heavenweaver    時間: 2014-3-1 23:52

補#16的圖,有圖才有真象!
[attach]17629[/attach]




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