【问题标题】:Web scraping text in a tableWeb 抓取表格中的文本
【发布时间】:2021-02-22 13:16:53
【问题描述】:

我希望将网站表格中的所有文本内容放入 Excel 单元格 A9 到 A16。单元格 A1 到 A8 很好,因为所有数据都在那里,但格式不好(另一个问题)。

我正在使用.getElementByClassName,表的类名是 table,它是站点中的第一个表,因此是 0。我正在尝试获取 tr 标签中的所有文本内容,但它并没有完全填充从A9。我假设在它们之间或另一列之间有很多空格。

Sub VBAWebscraping()

    Dim ieObj As InternetExplorer
    Dim htmlEle As IHTMLElement
    Dim i As Integer
    i = 1
    
    Set ieObj = New InternetExplorer
    ieObj.Visible = True
    ieObj.navigate Url:="https://www.miamidade.gov/Apps/PA/propertysearch/#/?folio=0431070030890"
    
    Do While ieObj.Busy = True Or ieObj.readyState <> READYSTATE_COMPLETE
        Application.Wait Now + TimeValue("00:00:05")
    Loop
    
    For Each htmlEle In ieObj.document.getElementsByClassName("table")(0).getElementsByTagName("tr")
    
        With ActiveSheet
            .Range("A" & i).Value = htmlEle.Children(0).textContent
        End With
    
        i = i + 1
    
    Next htmlEle
    
End Sub

【问题讨论】:

  • 从 A9 未完成时是否显示任何错误?您使用的是哪个 IE 版本和操作系统版本?我在两个版本的IE中做了测试,发现结果不一样。在 11.1082.18362.0 版本中,代码运行良好 like this。但是在 11.572.19041.0 版本中,网站甚至无法完全加载,can't find the table#property_info。所以也请使用 F12 开发工具检查 html 元素以查看表格是否已完全加载。
  • 周宇你好。谢谢你的回复。我没有收到任何错误。我使用的是 IE 版本 11.9,Windows 10 Pro 是我的操作系统。我开始寻找其他方法来抓取这个网站,并使用 Python、API 和 JSON 陷入困境。我是初学者,所以我仍在学习并试图弄清楚。我相信该网站已完全加载。
  • 很奇怪,它没有显示任何错误但不起作用。您的代码可以在我这边运行良好。尝试使用其他方法来实现您想要的效果是个好主意。

标签: excel vba parsing internet-explorer web-scraping


【解决方案1】:

i 需要用值 9 进行初始化。您还可以迭代 getElementById("#property_info").rows,而不是返回整个表集合并对其进行索引。

为了进行整理,这是因为您提取了每个第一个子节点的内容,这些子节点可能是其他各种节点的父节点,这些节点虽然在页面上很整洁,但如果没有工作表中的 html 格式,看起来很乱。您需要根据子节点编写更详细的内容。

您也可以使用数据 > 工具 > 网络查询来拉表(昂贵),或者 use the clipboard to transfer the .outerHTML of the table to the page 你会在哪里使用clipboard.SetText ie.document.getElementById("#property_info").outerHTML

【讨论】:

  • 你好 QHarr。谢谢你的回复。我将 i 设置为 9,但它所做的只是将数据从 A9 移动到 A24。关于使用剪贴板传输表格。我会调查这个并回复你。我一直在研究其他的抓取方式,并遇到了 API、JSON 等。看起来这可能是最好的方法。还不确定。
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2020-09-11
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多