使用VBA抓取網頁資料,大約不到5筆就會當掉,求解
- 帖子
- 132
- 主題
- 31
- 精華
- 0
- 積分
- 167
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- Taipei
- 註冊時間
- 2011-4-14
- 最後登錄
- 2024-2-28
  
|
使用VBA抓取網頁資料,大約不到5筆就會當掉,求解
本帖最後由 clio 於 2019-8-23 14:38 編輯
各位前輩,
小弟我需要在利用DigiKey來作資料比對的工作,當抓到有相符的資料,會將一些資料記錄下來,但是之前利用VBA抓網頁的程式有獲【GBKEE】大大的指導修改了,但是目前因為連結的地點不同,也發現竟然跑到第五筆就當料,特地上來求解,還請給小弟一些建議,感謝您。
小弟會用活頁【PN List】內的B欄內資料為Key值去代入網頁抓取資料
抓網頁資料程式_D1.zip (38.53 KB)
|
|
clio
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
2#
發表於 2019-8-24 10:38
| 只看該作者
回復 1# clio
只抓
https://www.digikey.tw/products/en?keywords=%22CRL2010-JW-1R00ELF-ND%22
剩下請自行修改
test.zip (15.43 KB)
|
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 31
- 精華
- 0
- 積分
- 167
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- Taipei
- 註冊時間
- 2011-4-14
- 最後登錄
- 2024-2-28
  
|
3#
發表於 2019-8-26 10:38
| 只看該作者
回復 2# joey0415
Hi Joey0415,
小弟測試過了,可以執行一筆,但是因為是比對該料是否在Digikey的資料庫內,所以會有比對剛好一筆,多筆,與找不到的情況,我原先的程式,有考量這些情況分別作不同處置,但是您的這個程式,只能找到有跑出Table的表格的,所以會有當機的情況說,是否還有改善方式呢?感謝您。
【TD62597AFG】找不到資料
【ULN2003AFWG】找到多筆資料 |
|
clio
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
4#
發表於 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
複製代碼 |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 31
- 精華
- 0
- 積分
- 167
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- Taipei
- 註冊時間
- 2011-4-14
- 最後登錄
- 2024-2-28
  
|
5#
發表於 2019-8-27 15:23
| 只看該作者
回復 4# joey0415
Hi Joey,
請問一下我怎麼樣可以知道這個網頁有幾個Table呢?有一個計算的程式嗎? |
|
clio
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
6#
發表於 2019-8-27 20:46
| 只看該作者
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 31
- 精華
- 0
- 積分
- 167
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- Taipei
- 註冊時間
- 2011-4-14
- 最後登錄
- 2024-2-28
  
|
7#
發表於 2019-8-28 17:22
| 只看該作者
回復 6# joey0415
萬分感謝Joey的詳細解說,真的讓小弟我受益很多,解決了這個問題
想再跟前輩請教一下,當小弟改成使用XMLHTTP來抓取網頁資料時,大約60筆左右,就會產生無法連結的錯誤,其Status→403
小弟也在網路上試著找尋解決辨法,但是未果,不知道前輩是否知道解決的方法呢?
再次請教,麻煩您了,感謝您。 |
|
clio
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
8#
發表於 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
如果還不行
再請益別的高手 |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 31
- 精華
- 0
- 積分
- 167
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- Taipei
- 註冊時間
- 2011-4-14
- 最後登錄
- 2024-2-28
  
|
9#
發表於 2019-8-30 08:59
| 只看該作者
回復 8# joey0415
感謝Joey ,小弟我再試試看…萬分感謝您 |
|
clio
|
|
|
|
|