需要帮助抓excel vba

时间:2013-12-02 17:58:10

标签: excel vba excel-vba web

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

  1. “Catherine Lansfield Helena Multi Bedspread - Double”
  2. “这款令人惊艳的象牙色床罩专为Helena卧室系列而设计。它采用精致的花卉设计,饰有菱形绗缝饰面。床罩采用衬垫设计,可在夏季用作轻质被子或在冬天增加一层。 聚酯。 尺寸L260,宽240厘米。 适合双人床。 可机洗在30°C。 适合滚筒烘干。 EAN:5055184924746。
  3. 产品代码116/4196“
  4. 我尝试了不同的方法,最终没有一个对我有好处。对于Mid和InStr函数,结果是none,可能是我的代码错了。对不起,我不提供任何代码,因为我已经搞砸了很多次并没有结果。我试图用GetDatafromPage刮取孔页。它运行良好,但对于不同的产品页面,输出会转到不同的行,因为元素的大小会在页面之间发生变化。也不可能只刮掉所选择的元素。因此从定义的单元格中获取价值毫无意义。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

这似乎并不太难。您可以使用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,我不知道默认情况下是否存在,如果不是,则必须先将其设置为运行此代码。)