繁体   English   中英

需要帮助与Excel VBA刮

[英]need help scraping with excel vba

我需要抓取标题,产品说明和产品代码,并将其从<<< HERE >>>保存到工作表中,在这种情况下,这些是:

  1. “凯瑟琳兰斯菲尔德海伦娜多床罩-双”
  2. “这款令人惊叹的象牙色床罩经过特别设计,可与Helena卧室系列一起使用。它具有微妙的花卉设计,带有菱形finish缝饰面。床罩带有衬垫,因此可以在夏天用作轻质被子或额外的层涤纶,尺寸L260,宽240厘米,适合双人床使用,可在30°C机洗,适用于滚筒烘干EAN:5055184924746。
  3. 产品代码116/4196“

我尝试了不同的方法,但最后没有一个方法对我有好处。 对于Mid和InStr函数,结果为空,可能是我的代码错误。 抱歉,我没有提供任何代码,因为我已经把它弄乱了很多次,也没有结果。 我试图用GetDatafromPage抓取孔页。 它运作良好,但是对于不同的产品页面,随着元素数量在页面之间的变化,输出将转到不同的行。 而且,不可能只刮取选定的元素。 因此,从定义的单元中获取价值是没有意义的。

替代使用InternetExplorer对象的另一个选项是xmlhttp对象。 这是与kekusemau相似的示例,但是使用xmlhttp对象来请求页面。 然后,我从html文件中的xmlhttp对象加载responseText

Sub test()
    Dim xml As Object
    Set xml = CreateObject("MSXML2.XMLHTTP")
    xml.Open "Get", "http://www.argos.co.uk/static/Product/partNumber/1164196.htm", False
    xml.send

    Dim doc As Object
    Set doc = CreateObject("htmlfile")
    doc.body.innerhtml = xml.responsetext

    Dim name
    Set name = doc.getElementById("pdpProduct").getElementsByTagName("h1")(0)
    MsgBox name.innerText

    Dim desc
    Set desc = doc.getElementById("genericESpot_pdp_proddesc2colleft").getElementsByTagName("div")(0)
    MsgBox desc.innerText

    Dim id
    Set id = doc.getElementById("pdpProduct").getElementsByTagName("span")(0).getElementsByTagName("span")(2)
    MsgBox id.innerText
End Sub

这似乎不太困难。 您可以使用Firefox来查看页面结构(右键单击某处,然后单击inspect element ,然后从那里继续...)

这是一个简单的示例代码:

Sub test()
    Dim ie As InternetExplorer
    Dim x

    Set ie = New InternetExplorer
    ie.Visible = True
    ie.Navigate "http://www.argos.co.uk/static/Product/partNumber/1164196.htm"
    While ie.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Wend

    Set x = ie.Document.getElementById("pdpProduct").getElementsByTagName("h1")(0)
    MsgBox Trim(x.innerText)

    Set x = ie.Document.getElementById("genericESpot_pdp_proddesc2colleft").getElementsByTagName("div")(0)
    MsgBox x.innerText

    Set x = ie.Document.getElementById("pdpProduct").getElementsByTagName("span")(0).getElementsByTagName("span")(2)
    MsgBox x.innerText

    ie.Quit
End Sub

(我在Excel中有对Microsoft Internet Controls的引用,我不知道默认情况下是否存在该引用,如果没有,则必须先设置它才能运行此代码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM