Excel VBA - 从网页中提取数据

时间:2015-12-25 14:07:10

标签: excel vba internet-explorer web-scraping

我试图通过自动化网络浏览器从亚马逊页面中提取卖家信息。我试图运行下面的代码,但我得到的错误是:

  

对象变量或未设置块变量。

有人可以指导我在哪里出错。

Option Explicit
Sub RunNewModule()  
    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = False
    ie.Navigate "http://www.amazon.com/gp/offer-listing/B00SVA81Z2/ref=dp_olp_new_mbc?ie=UTF8&condition=new"
    Dim priceData As Variant
    Dim sellerdata As Variant
    Dim item As Variant
    Dim cntr As Integer
    priceData = html.getElementsByClassName("olpOfferPrice").getElementsByTagName("span")(0).innerText
    cntr = 1
    For Each item In priceData
        Range("B" & cntr) = item.innerText
        cntr = cntr + 1
    Next item
    sellerdata = html.getElementsByClassName("olpSellerName").getElementsByTagName("span")(0).innerText    
    cntr = 1
    For Each item In sellerdata
        Range("A" & cntr) = item.innerText
        cntr = cntr + 1
    Next item  
End Sub

1 个答案:

答案 0 :(得分:3)

您没有指定html,现在它为空。

你应该这样分配:

Set html= ie.Document

按类别名称获取元素:

Dim ie As InternetExplorer
Dim html As IHTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.Navigate "http://stackoverflow.com/questions/34463544/vba-fetching-data-from-class-name"
While ie.Busy
    DoEvents
Wend
While ie.ReadyState < 4
    DoEvents
Wend
Set html = ie.Document
Dim elements As IHTMLElementCollection
Set elements = html.getElementsByClassName("question-hyperlink")
If elements.Length > 0 Then
    MsgBox elements(0).innerText
End If
ie.Quit
Set ie = Nothing

enter image description here

不要忘记添加对:

的引用
  • Microsoft Internet Controls
  • Microsoft Html Object library

对于亚马逊链接:

Dim ie As InternetExplorer
Dim html As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.Navigate "http://www.amazon.in/gp/offer-listing/B00EYCBGNA/ref=dp_olp_new_mbc?ie=UTF8&condition=new"
While ie.Busy
    DoEvents
Wend
While ie.ReadyState < 4
    DoEvents
Wend

Set html = ie.Document
Dim elements As IHTMLElementCollection
Set elements = html.getElementsByClassName("olpOfferPrice")
For i = 0 To elements.Length - 1
     Sheet1.Range("A" & (i + 1)) = elements(i).innerText
Next i

Set elements = html.getElementsByClassName("olpSellerName")
For i = 0 To elements.Length - 1
    Sheet1.Range("B" & (i + 1)) = elements(i).innerText
Next i
ie.Quit
Set ie = Nothing

enter image description here