返回列表 上一主題 發帖

[發問] 想請教如何在網頁(非表格狀態)抓資料(特定字串)到EXCEL表單

回復 1# kuhsuanchieh


    試試看
  1. Option Explicit
  2. '頁數
  3. Const 頁數網址 = "http://www.tyland.org.tw/pg.asp?theme=11&kinds=2&area=&search=o&review=&model=1&meid=&absolutepage="
  4. '會號 ID
  5. Const ID = "http://www.tyland.org.tw/view-m.asp?mno="
  6. Dim Sh As Worksheet, Ie As Object
  7. Sub Ex()
  8.     Ex現在會員名錄
  9.     Ex_所有會員資料
  10. End Sub
  11. Sub Ex現在會員名錄()
  12.     Dim i As Integer, xTable As Object, r As Integer
  13.     Set Ie = CreateObject("InternetExplorer.Application")
  14.     Set Sh = Sheets(1)
  15.     With Sh
  16.         .UsedRange.Clear
  17.         .[A1:E1] = Array("ID", "姓名", "電話", "傳真", "地址")
  18.         '.[A1:D1] = Array( "姓名", "電話", "傳真", "地址")
  19.         .Activate
  20.     End With
  21.     With CreateObject("InternetExplorer.Application")
  22.       '  .Visible = True
  23.         For i = 1 To Max_Page
  24.             .Navigate 頁數網址 & i
  25.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  26.            Set xTable = .Document.all.tags("table")(0).Rows
  27.            Application.StatusBar = 頁數網址 & i & "  載入..."
  28.             For r = 1 To xTable.Length - 1
  29.                 Ex_現在會員資料 ID & xTable(r).Cells(1).INNERTEXT
  30.             Next
  31.         Next
  32.         .Quit
  33.     End With
  34.     Ie.Quit
  35.     Set Ie = Nothing
  36. End Sub
  37. Sub Ex_現在會員資料(URL As String)
  38.     Dim ID As String, i As Integer, E As Variant, ii As Integer, t As Variant, AR()
  39.     ID = "http://www.tyland.org.tw/view-m.asp?mno="
  40.     AR = Array(0, 1, 2, 3, 6) 'AR = Array( 1, 2, 3, 6) 不要"ID"
  41.     With Ie
  42.         '  .Visible = True
  43.             .Navigate URL
  44.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  45.             t = Split(.Document.BODY.INNERTEXT, vbLf)  '網頁的文字,vbLf 切割為陣列
  46.             With Sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
  47.                 .Select  '可不用
  48.                 For ii = 0 To 4
  49.                     .Cells(1, ii + 1) = Split(t(AR(ii)), ":")(1)
  50.                 Next
  51.             End With
  52.       
  53.     End With
  54. End Sub
  55. Function Max_Page() As Integer  '傳回會員名錄的總頁數
  56.     Dim E As Object
  57.     With CreateObject("InternetExplorer.Application")
  58.        ' .Visible = True
  59.         .Navigate "http://www.tyland.org.tw/pg.asp?theme=11"
  60.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  61.             For Each E In .Document.all.tags("A")
  62.                 If InStr(E.INNERTEXT, "最後一頁") Then
  63.                     Max_Page = Replace(E.href, 頁數網址, "") '網頁字串最後的數字
  64.                     Exit For
  65.                 End If
  66.             Next
  67.         .Quit        '關閉網頁
  68.     End With
  69. End Function
  70. '****************************************************
  71. Sub Ex_所有會員資料()
  72.     Dim i As Integer, E As Variant, ii As Integer, t As Variant, AR()
  73.     Dim Sh As Worksheet
  74.     Set Sh = Sheets(2)
  75.     With Sh
  76.         .UsedRange.Clear
  77.         .[A1:E1] = Array("ID", "姓名", "電話", "傳真", "地址")
  78.         '.[A1:D1] = Array( "姓名", "電話", "傳真", "地址")
  79.         .Activate
  80.     End With
  81.     AR = Array(0, 1, 2, 3, 6)  'AR = Array( 1, 2, 3, 6) '不要"ID"
  82.     With CreateObject("InternetExplorer.Application")
  83.          ' .Visible = True
  84.         For i = 1 To Max_Id
  85.             .Navigate ID & i
  86.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  87.             Application.StatusBar = ID & i & "  載入..."
  88.             t = Split(.Document.BODY.INNERTEXT, vbLf)
  89.             If UBound(t) > -1 Then
  90.                 With Sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
  91.                     .Select  '可不用
  92.                     For ii = 0 To 4   'For ii = 0 To 3  '不要"ID
  93.                         .Cells(1, ii + 1) = Split(t(AR(ii)), ":")(1)
  94.                     Next
  95.                 End With
  96.             End If
  97.         Next
  98.         .Quit
  99.     End With
  100. End Sub
  101. Function Max_Id() As Integer '查找最新會員的會號
  102.     Dim E As Object
  103.     With CreateObject("InternetExplorer.Application")
  104.        ' .Visible = True
  105.         .Navigate "http://www.tyland.org.tw/pg.asp?theme=11"
  106.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  107.             For Each E In .Document.all.tags("A")
  108.                 If InStr(E.INNERTEXT, "最後一頁") Then
  109.                     E.Click   '按下 "最後一頁"
  110.                     Exit For
  111.                 End If
  112.             Next
  113.            Do While .Busy Or .readyState <> 4: DoEvents: Loop
  114.            Set E = .Document.all.tags("table")(0).Rows
  115.             Max_Id = E(E.Length - 1).Cells(1).INNERTEXT  '最新會員的會號
  116.         .Quit        '關閉網頁
  117.     End With
  118. End Function
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2015-9-25 15:32 編輯

回復 3# kuhsuanchieh
  1. For i = 1 To Max_Id
  2.            .Navigate ID & i
複製代碼
Sub Ex_所有會員資料().可以改成如此,
會員號碼最後是 1407,9999會多跑很久的
  1. For i = 1 To 9999
  2.            .Navigate ID & i
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2015-9-26 10:35 編輯

回復 5# 准提部林

愛說笑了版主程式碼,快太多了.
CreateObject("MSXML2.XMLHTTP")本文傳送完,ie還在開啟等候中...
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題