Board logo

標題: 使用VBA抓取網頁資料,大約不到5筆就會當掉,求解 [打印本頁]

作者: clio    時間: 2019-8-23 14:33     標題: 使用VBA抓取網頁資料,大約不到5筆就會當掉,求解

本帖最後由 clio 於 2019-8-23 14:38 編輯

各位前輩,
小弟我需要在利用DigiKey來作資料比對的工作,當抓到有相符的資料,會將一些資料記錄下來,但是之前利用VBA抓網頁的程式有獲【GBKEE】大大的指導修改了,但是目前因為連結的地點不同,也發現竟然跑到第五筆就當料,特地上來求解,還請給小弟一些建議,感謝您。
小弟會用活頁【PN List】內的B欄內資料為Key值去代入網頁抓取資料
[attach]31176[/attach]
作者: joey0415    時間: 2019-8-24 10:38

回復 1# clio
只抓
https://www.digikey.tw/products/en?keywords=%22CRL2010-JW-1R00ELF-ND%22

剩下請自行修改
[attach]31178[/attach]
作者: clio    時間: 2019-8-26 10:38

回復 2# joey0415

Hi Joey0415,
小弟測試過了,可以執行一筆,但是因為是比對該料是否在Digikey的資料庫內,所以會有比對剛好一筆,多筆,與找不到的情況,我原先的程式,有考量這些情況分別作不同處置,但是您的這個程式,只能找到有跑出Table的表格的,所以會有當機的情況說,是否還有改善方式呢?感謝您。
【TD62597AFG】找不到資料
【ULN2003AFWG】找到多筆資料
作者: joey0415    時間: 2019-8-26 22:50

回復 3# clio

一筆,多筆,無資料,可用網頁上有幾個table判斷

下方是多筆
  1. Sub test()
  2.     Cells.ClearContents
  3.     '設定引用項目  microsoft html object library
  4.     Dim bPostData() As Byte
  5.     Dim URL, strurlHeaders As String
  6.     Dim i, j As Integer
  7.     Dim hDoc As New MSHTML.HTMLDocument
  8.     Dim objIE As Object
  9.     spath = ThisWorkbook.Path
  10.     URL = "https://www.digikey.tw/products/en?keywords=ULN2003AFWG"
  11. '    Stop
  12.      strurlHeaders = "Content-Type: application/x-www-form-urlencoded"
  13.     Set objIE = CreateObject("InternetExplorer.Application")
  14.     With objIE
  15.         .Visible = True
  16.         .Navigate URL, , , bPostData, strurlHeaders
  17.         Do While .readyState <> 4: DoEvents: Loop
  18.         Set hTable = .Document.getElementsByTagName("table")(0)
  19.             With ActiveSheet
  20.                 For i = 0 To hTable.Rows.Length - 1
  21.                     For j = 0 To hTable.Rows(i).Cells.Length - 1
  22.                         .Cells(i + 1, j + 1) = hTable.Rows(i).Cells(j).innerText
  23.                     Next
  24.                 Next
  25.             End With
  26.     End With
  27.     objIE.Quit
  28.     Set objIE = Nothing
  29. End Sub
複製代碼

作者: clio    時間: 2019-8-27 15:23

回復 4# joey0415

Hi Joey,
請問一下我怎麼樣可以知道這個網頁有幾個Table呢?有一個計算的程式嗎?
作者: joey0415    時間: 2019-8-27 20:46

回復 5# clio

COUNT_TABLE = .Document.getElementsByTagName("table").Length

如果
COUNT_TABLE =2  多欄
COUNT_TABLE =6  一欄
COUNT_TABLE =0  無資料

[attach]31192[/attach]

[attach]31193[/attach]

[attach]31194[/attach]
作者: clio    時間: 2019-8-28 17:22

回復 6# joey0415
萬分感謝Joey的詳細解說,真的讓小弟我受益很多,解決了這個問題
想再跟前輩請教一下,當小弟改成使用XMLHTTP來抓取網頁資料時,大約60筆左右,就會產生無法連結的錯誤,其Status→403
小弟也在網路上試著找尋解決辨法,但是未果,不知道前輩是否知道解決的方法呢?
再次請教,麻煩您了,感謝您。
作者: joey0415    時間: 2019-8-29 21:09

本帖最後由 joey0415 於 2019-8-29 21:10 編輯

回復 7# clio

直接調用Application.Wait
VBA內的Application Object 有 Wait 可供使用,若要暫停1秒,可編碼:
Application.Wait Now + TimeValue("00:00:01")

加上等待時間試試
有的網站要等
秒數不一定

公開資訊站goodinfo等,爬太快都會鎖ip

如果還不行
再請益別的高手
作者: clio    時間: 2019-8-30 08:59

回復 8# joey0415

感謝Joey ,小弟我再試試看…萬分感謝您




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