【问题标题】:Scraping HTML tables using VBA使用 VBA 抓取 HTML 表格
【发布时间】:2018-01-05 01:43:11
【问题描述】:

使用下面的脚本,我成功地将 HTML 表中的值从以下链接返回到工作簿中:link1link2。但是当我尝试对以下link3 使用相同的脚本时,它不会返回任何内容。我认为这是由于网站上存在复杂的 HTML 表格结构。我相信由于表格的复杂性,代码需要调整 .Item(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

【问题讨论】:

  • 能否请您补一下脚本,我去下载selenium。
  • 我需要安装哪个版本才能完成这项工作? selenium download page
  • 顺便说一句,看到你脚本中的链接,我删除了我的评论。这是你需要抓取的链接吗?
  • This is the link that I want to scrape off. 但基本上我想建立一个包含所有三个网站的数据库,以便在一个地方查看价格。但是此评论中提到的链接该脚本不起作用。
  • 您的脚本已准备就绪,我可以运行它,但您现在无法运行它。

标签: vba excel web-scraping html-table


【解决方案1】:

您在帖子中提到的网站在解析不同产品的价格时有点棘手。很少有产品有原价,其余的都有特价。在您对表达式应用一种技术之前,您不能同时解析它们。我已经编写了一个能够处理它们的 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 绑定的硒没有任何属性可以避免“下一个错误恢复”,所以我把它放在循环之前。谢谢。

【讨论】:

  • 好的,我知道它是如何完成的了。但是在尝试运行上述 VBA 时,我遇到了错误,突出显示以下内容:driver as New ChromeDriver 和错误本身:User defined type not defined
  • 看到这一点,我想到了两件事。 1.你安装了chromedriver吗? 2.执行前是否在参考库中添加了“硒类型库”?顺便说一句,如果您知道如何使用 selenium,那么网页抓取将会非常舒适,因为现在您将面对许多注入了 javascript 的网站。
  • 很抱歉给您带来了这么多麻烦,但这对我来说是全新的事情。我收到以下错误:imgur 我已将 selenium 添加到库引用中,因此我已按照说明安装 ChromeDrivers on this link
  • 没问题马丁。暂时忽略 chromedriver 的事情。告诉我——你能像前面所说的那样使用 selenium 和 vba 运行任何脚本吗?我的意思是你能用 selenium 运行任何东西吗?
  • 我不完全确定您说我可以使用 selenium 运行脚本是什么意思。如果我在 BodyBuildingWarehouse 网站上运行 web_data 子程序,VBA 会成功抓取 HTML,只是它返回的值不正确,因为有多个价格表 ID。在我安装 selenium 之前,这个相同的 web_data 脚本没有返回任何内容。
猜你喜欢
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多