使用VBA抓取HTML表

使用VBA抓取HTML表,vba,excel,web-scraping,html-table,Vba,Excel,Web Scraping,Html Table,使用下面的脚本,我成功地从以下链接将HTML表中的值返回到工作簿中:和。但是,当我尝试对以下内容使用相同的脚本时,它不会返回任何内容。我认为这是因为网站上存在复杂的HTML表格结构。我相信代码需要调整。由于表的复杂性,项目(0)编号需要调整,请给出建议 Sub Web_Data() Dim http As New XMLHTTP60, html As New HTMLDocument Dim topic As HTMLHtmlElement With http

使用下面的脚本,我成功地从以下链接将HTML表中的值返回到工作簿中:和。但是,当我尝试对以下内容使用相同的脚本时,它不会返回任何内容。我认为这是因为网站上存在复杂的HTML表格结构。我相信代码需要调整。由于表的复杂性,项目(0)编号需要调整,请给出建议

Sub Web_Data()
    Dim http As New XMLHTTP60, html As New HTMLDocument
    Dim topic As HTMLHtmlElement

    With http
        .Open "GET", "http://www.dolphinfitness.co.uk/en/optimum-nutrition/", False
        .send
        html.body.innerHTML = .responseText
    End With

    For Each topic In html.getElementsByClassName("category-products")
        With topic.getElementsByClassName("product-name")
            If .Length Then x = x + 1: Cells(x, 1) = .Item(0).innerText
        End With
        With topic.getElementsByClassName("price")
            If .Length Then Cells(x, 2) = .Item(0).innerText
        End With
    Next topic
End Sub

你在文章中提到的网站在解析不同产品的价格时有点棘手。很少有产品有原价,其余的都有特价。在对表达式应用技术之前,无法同时解析这两个表达式。我已经编写了一个xpath,它能够处理这些问题,您将能够获得所有这些问题。以下是脚本:

Sub Body_Building()
    Dim driver As New WebDriver, post As Object

    With driver
        .Start "chrome", "http://www.bodybuildingwarehouse.co.uk"
        .Get "/optimum-nutrition?limit=all"
    End With

    On Error Resume Next
    For Each post In driver.FindElementsByClass("grid-info")
        i = i + 1: Cells(i, 1) = post.FindElementByClass("product-name").Text
        Cells(i, 2) = post.FindElementByXPath(".//span[@class='regular-price']//span[@class='price']|.//p[@class='special-price']//span[@class='price']").Text
    Next post
End Sub

如果您在执行脚本时遇到任何问题,请告诉我。顺便说一句,带vba的selenium绑定没有任何属性可以避免“下一步出错时恢复”,所以我把它放在循环之前。谢谢。

请您编写脚本,我将下载selenium。我需要安装哪个版本才能完成此任务?顺便说一句,看到你脚本中的链接,我拿出了我的评论。这是你需要抓取的链接吗?但本质上,我想建立一个数据库,所有三个网站,以查看一个地方的价格。但是这个评论中提到的链接,脚本不起作用。你的脚本已经准备好了,我已经让它起作用了,但是你现在无法运行它。好的,我已经知道它是如何完成的。但是,当我试图运行上面的VBA时,出现了一个错误,突出显示以下内容:驱动程序为新的ChromeDriver,错误本身:用户定义类型未定义。1.你安装了chromedriver吗?2.在执行之前,您是否在参考库中添加了“selenium类型库”?顺便说一句,如果你知道如何使用selenium,网络抓取将非常舒适,因为现在你将面对许多注入javascript的网站。很抱歉,我用这个来打扰你这么多,但这对我来说是一件全新的事情。我得到了以下错误:我已将selenium添加到库引用中,以便按照说明安装ChromeDriver。没问题。暂时忽略chromedriver的事情。请告诉我-您可以使用selenium和vba运行任何脚本吗?正如您前面所说,我的意思是您可以使用selenium运行任何脚本吗?我不完全确定您所说的“我可以使用selenium运行脚本”到底是什么意思。如果我在BodyBuildingWarehouse网站上运行web_data sub,VBA会成功地删除HTML,只是返回了不正确的值,因为有多个价格表id。在我安装selenium之前,这个web_数据脚本没有返回任何内容。