在Excel中使用VB获取带有超链接的网页表格和表格

在Excel中使用VB获取带有超链接的网页表格和表格,excel,vba,internet-explorer,web-scraping,xmlhttprequest,Excel,Vba,Internet Explorer,Web Scraping,Xmlhttprequest,我使用此脚本获取Microsoft Excel网页的文本数据,但是,它只返回文本,但我希望在单独的列中获取超链接。你能帮帮我吗? 该命令似乎只返回文本数据,但我希望将文本和对应的URL保存为文本(当然不是超链接!) 我复习了 但我什么也找不到 您可以在代码中看到带有所提供url的网页 Sub SaveUrl() Set shFirstQtr = Workbooks(1).Worksheets(1) Set qtQtrResults = shFirstQtr.QueryTables

我使用此脚本获取Microsoft Excel网页的文本数据,但是,它只返回文本,但我希望在单独的列中获取超链接。你能帮帮我吗? 该命令似乎只返回文本数据,但我希望将文本和对应的URL保存为文本(当然不是超链接!)

我复习了 但我什么也找不到

您可以在代码中看到带有所提供url的网页

Sub SaveUrl()
    Set shFirstQtr = Workbooks(1).Worksheets(1)
    Set qtQtrResults = shFirstQtr.QueryTables _
                       .Add(Connection:="URL;http://www.tsetmc.com/Loader.aspx?ParTree=111C1417", _
                            Destination:=shFirstQtr.Cells(1, 1))
    With qtQtrResults
        .WebFormatting = xlNone
        .WebSelectionType = xlSpecifiedTables
        .WebTables = "1"
        .Refresh
    End With
End Sub

以下示例显示了如何自动化IE并从DOM检索必要的数据(运行
TestIE()
),以及如何使用XHR发出请求并使用RegEx解析响应(运行
TestXHR()
):

选项显式
'自动执行IE并从DOM检索必要数据的代码
次级睾丸()
Dim aText()作为变量
Dim aHref()作为变量
Dim aHrefExists()为布尔值
Dim aRes()作为变体
暗淡的灯光和长的灯光一样重要
昏暗的灯光和长的一样
我想我会坚持多久
Dim j尽可能长
昏暗的灯塔和长的一样
暗x等长
使用CreateObject(“InternetExplorer.Application”)
'使调试可见
.Visible=True
'导航到第页
.导航“http://www.tsetmc.com/Loader.aspx?ParTree=111C1417"
“等我准备好了
请稍等。ReadyState 4或。忙
多芬特
环
'等待文档完成
执行While.Document.ReadyState“完成”
多芬特
环
'等待可访问的目标表
当TypeName(.Document.getElementById(“tblToGrid”)=“Null”时执行此操作
多芬特
环
'进程目标表
With.Document.getElementById(“tblToGrid”)
'获取表大小
lRowsCount=.Rows.Length
lCellsCount=.Rows(0).Cells.Length
'为文本和超链接值以及列url存在标志创建二维数组
ReDim aText(1到lRowsCount,1到lCellsCount)
ReDim aHref(1至lRowsCount,1至LCELLSOUNT)
存在ReDim AHREF(1到LCELLSOUNT)
'处理每个表行
对于i=1到lRowsCount
带.Rows(i-1)
'处理每个单元格
对于j=1至lCellsCount
'检索文本内容
aText(i,j)=.单元格(j-1).innerText
'检索超链接(如果存在)
带.Cells(j-1).getElementsByTagName(“a”)
如果.Length=1,则
aHrefExists(j)=真
aHref(i,j)=.Item(0).href
如果结束
以
下一个
以
下一个
以
退出
以
'创建包含文本和URL的结果数组
lCellsTotal=lcellscont
对于j=1至lCellsCount
如果AHREF存在(j),则lCellsTotal=lCellsTotal+1
下一个
ReDim aRes(1对lRowsCount,1对lCellsTotal)
'用文本和URL填充数组
x=1
对于j=1至lCellsCount
对于i=1到lRowsCount
战神(i,x)=aText(i,j)
下一个
x=x+1
如果存在AHREF(j),则
对于i=1到lRowsCount
战神(i,x)=aHref(i,j)
下一个
x=x+1
如果结束
下一个
'结果输出到表1
附页(1)
.Cells.Delete
输出。单元格(1,1),aRes
以
端接头
'使用XHR发出请求并使用RegEx解析响应的代码
子测试xhr()
将文本设置为字符串
将行作为对象
以细胞为对象
Dim aRes()作为变体
暗淡的灯光和长的灯光一样重要
昏暗的灯光和长的一样
我想我会坚持多久
Dim j尽可能长
昏暗的灯塔和长的一样
暗x等长
'检索HTML内容
使用CreateObject(“MSXML2.XMLHttp”)
.打开“获取”http://www.tsetmc.com/Loader.aspx?ParTree=111C1417”“错
.发送
sRespText=.responseText
以
'表行的正则表达式设置
设置oRERows=CreateObject(“VBScript.RegExp”)
和奥利罗
.Global=True
.MultiLine=True
.IgnoreCase=True
.Pattern=“[\s\s]*?”
以
'表格单元格的正则表达式设置
设置oRECells=CreateObject(“VBScript.RegExp”)
含矿细胞
.Global=True
.MultiLine=True
.IgnoreCase=True
.Pattern=“(?:.*?*?|(.*)”
以
'在响应时执行第一个regexp
使用oRERows.Execute(sRespText)
'获取表大小
lRowsCount=.Count
lCellsCount=oRECells.Execute(.Item(0).Value.Count
'为文本和超链接值以及列url存在标志创建二维数组
ReDim aText(1到lRowsCount,1到lCellsCount)
ReDim aHref(1至lRowsCount,1至LCELLSOUNT)
存在ReDim AHREF(1到LCELLSOUNT)
'处理每个表行
对于i=1到lRowsCount
'获取第一个regexp匹配值,并对其执行第二个regexp
使用oRECells.Execute(.Item(i-1).Value)
'处理每个单元格
对于j=1到.Count
带.项目(j-1)
如果.SubMatches(3)“,则
'仅检索文本内容
aText(i,j)=.子匹配(3)
其他的
'检索文本内容和超链接
aText(i,j)=.子匹配(2)
aHref(i,j)=”http://www.tsetmc.com/“&.子匹配(1)
aHrefExists(j)=真
如果结束
以
下一个
以
下一个
以
'创建包含文本和URL的结果数组
lCellsTotal=lcellscont
对于j=1至lCellsCount