標題:
使用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判斷
下方是多筆
Sub test()
Cells.ClearContents
'設定引用項目 microsoft html object library
Dim bPostData() As Byte
Dim URL, strurlHeaders As String
Dim i, j As Integer
Dim hDoc As New MSHTML.HTMLDocument
Dim objIE As Object
spath = ThisWorkbook.Path
URL = "https://www.digikey.tw/products/en?keywords=ULN2003AFWG"
' Stop
strurlHeaders = "Content-Type: application/x-www-form-urlencoded"
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.Navigate URL, , , bPostData, strurlHeaders
Do While .readyState <> 4: DoEvents: Loop
Set hTable = .Document.getElementsByTagName("table")(0)
With ActiveSheet
For i = 0 To hTable.Rows.Length - 1
For j = 0 To hTable.Rows(i).Cells.Length - 1
.Cells(i + 1, j + 1) = hTable.Rows(i).Cells(j).innerText
Next
Next
End With
End With
objIE.Quit
Set objIE = Nothing
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/)