从网页表中收集图片url和数据到Excel表格

需要从网页上的表格收集数据,一些表格单元格有图像。 代码是将数据复制到Excel,如果单元格有图像,则获取其src链接而不是图像。 下面是代码,但它不工作,我不知道如何检测单元格是否有图像,并将其链接添加到Excel单元格。

Sub extractData() Dim IE As Object, obj As Object Dim myYear As String Dim r As Integer, c As Integer, t As Integer Dim elemCollection As Object Set IE = CreateObject("InternetExplorer.Application") myYear = InputBox("Enter year") With IE .Visible = True .navigate ("url") While IE.ReadyState <> 4 DoEvents Wend For Each obj In IE.Document.All.Item("Year").Options If obj.innerText = myYear Then obj.Selected = True End If Next obj IE.Document.getElementsByName("btn_search").Item.Click Do While IE.busy: DoEvents: Loop ThisWorkbook.Sheets("Sheet1").Range("A1:K2000").ClearContents Set elemCollection = IE.Document.getElementsByTagName("TABLE") For t = 0 To (elemCollection.Length - 9) For r = 0 To (elemCollection(t).Rows.Length - 1) For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1) If elemCollection(t).Rows(r).Cells(c).innerText = "" Then ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).getAttribute("src") Exit For End If Next ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText Next c Next r Next t End With Set IE = Nothing End Sub 

首先,刷新HTML文档对象模型 。 有大量关于如何使用JavaScript来处理DOM的教程,而且VBA是真实的类似的(因为DOM不会根据语言而改变,而VBA与VBScript类似于JavaScript)非常密切。 其次,如果出现错误,但单击“debugging”button时未突出显示行,请使用F8键逐行执行代码。 这将让你找出错误发生的地方。 第三,添加对Microsoft HTML Object Library的引用,以便您可以使用Intellisense获取代码提示。

很难给出一个实际的解决scheme,而没有看到HTML源代码,所以我会给一些指针:

使用IE.Document.Body.getElementsByTagName("TABLE") (注意添加BODY来缩小范围)来获取页面上每个表的集合。 通过引用HTML对象库,你可以这样做:

 Dim oTable As HTMLTable Dim oCell As HTMLTableCell Dim oImg As HTMLImage Dim strSrc As String For Each oCell In oTable.Cells strSrc = "" On Error Resume Next Set oImg = oCell.getElementsByTagName("img") strSrc = oImg.Source On Error GoTo 0 If strSrc <> "" Then Debug.Print strSrc Next 

这应该(我没有testing它)遍历表中的每个单元格,并试图获得一个img元素。 如果失败了,没有什么大不了的,只要继续下一个单元格。 如果你想在使用后期绑定后,删除HTML Obj Lib的引用,然后简单地把所有东西暗淡为一个对象。 例如:

 Dim oTable As Object 'HTMLTable Dim oCell As Object 'HTMLTableCell Dim oImg As Object 'HTMLImage Dim strSrc As String