Excel VBA – 从网页中提取数据
我试图通过自动化网页浏览器从价格低廉的亚马逊页面中提取卖家信息。 我试图运行下面的代码,但是我得到的错误是:
对象variables或未设置块variables。
有人可以指导我哪里错了。
Option Explicit Sub RunNewModule() Dim ie As InternetExplorer Dim html As HTMLDocument Set ie = CreateObject("InternetExplorer.Application") ie.Visible = False ie.Navigate "http://rads.stackoverflow.com/amzn/click/B00SVA81Z2" 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
你没有分配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
不要忘记添加引用:
-
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