vba、getElementsByClassName、HTMLSource的双引号不见了

2023-12-01

我用 VBA 抓取一些网站是为了好玩,我使用 VBA 作为工具。我使用 XMLHTTP 和 HTMLDocument (因为它比 internetExplorer.Application 更快)。

Public Sub XMLhtmlDocumentHTMLSourceScraper()

    Dim XMLHTTPReq As Object
    Dim htmlDoc As HTMLDocument

    Dim postURL As String

    postURL = "http://foodffs.tumblr.com/archive/2015/11"

        Set XMLHTTPReq = New MSXML2.XMLHTTP

        With XMLHTTPReq
            .Open "GET", postURL, False
            .Send
        End With

        Set htmlDoc = New HTMLDocument
        With htmlDoc
            .body.innerHTML = XMLHTTPReq.responseText
        End With

        i = 0

        Set varTemp = htmlDoc.getElementsByClassName("post_glass post_micro_glass")

        For Each vr In varTemp
            ''''the next line is important to solve this issue *1
            Cells(1, 1) = vr.outerHTML
            Set varTemp2 = vr.getElementsByTagName("SPAN class=post_date")
            Cells(i + 1, 3) = varTemp2.Item(0).innerText
            ''''the next line occur 438Error''''
            Set varTemp2 = vr.getElementsByClassName("hover_inner")
            Cells(i + 1, 4) = varTemp2.innerText

            i = i + 1

        Next vr
End Sub

我通过*1解决了这个问题 cells(1,1) 向我展示接下来的事情

<DIV class="post_glass post_micro_glass" title=""><A class=hover title="" href="http://foodffs.tumblr.com/post/134291668251/sugar-free-low-carb-coffee-ricotta-mousse-really" target=_blank>
<DIV class=hover_inner><SPAN class=post_date>...............

是的,所有的类标签都丢失了“”。只有第一个函数的类有“” 我实在不知道为什么会出现这种情况。

//好吧,我可以通过 getElementsByTagName("span") 进行分词。但我更喜欢“class”标签......


The getElementsByClassName 方法本身不被视为一种方法;仅父 HTMLDocument 的。如果您想使用它来定位 DIV 元素中的元素,则需要创建一个由该特定 DIV 元素的 .outerHtml 组成的子 HTMLDocument。

Public Sub XMLhtmlDocumentHTMLSourceScraper()

    Dim xmlHTTPReq As New MSXML2.XMLHTTP
    Dim htmlDOC As New HTMLDocument, divSUBDOC As New HTMLDocument
    Dim iDIV As Long, iSPN As Long, iEL As Long
    Dim postURL As String, nr As Long, i As Long

    postURL = "http://foodffs.tumblr.com/archive/2015/11"

    With xmlHTTPReq
        .Open "GET", postURL, False
        .Send
    End With

    'Set htmlDOC = New HTMLDocument
    With htmlDOC
        .body.innerHTML = xmlHTTPReq.responseText
    End With

    i = 0

    With htmlDOC
        For iDIV = 0 To .getElementsByClassName("post_glass post_micro_glass").Length - 1
            nr = Sheet1.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row
            With .getElementsByClassName("post_glass post_micro_glass")(iDIV)
                'method 1 - run through multiples in a collection
                For iSPN = 0 To .getElementsByTagName("span").Length - 1
                    With .getElementsByTagName("span")(iSPN)
                        Select Case LCase(.className)
                            Case "post_date"
                                Cells(nr, 3) = .innerText
                            Case "post_notes"
                                Cells(nr, 4) = .innerText
                            Case Else
                                'do nothing
                        End Select
                    End With
                Next iSPN
                'method 2 - create a sub-HTML doc to facilitate getting els by classname
                divSUBDOC.body.innerHTML = .outerHTML  'only the HTML from this DIV
                With divSUBDOC
                    If CBool(.getElementsByClassName("hover_inner").Length) Then 'there is at least 1
                        'use the first
                        Cells(nr, 5) = .getElementsByClassName("hover_inner")(0).innerText
                    End If
                End With
            End With
        Next iDIV
    End With

End Sub

而其他.getElementsByXXXX可以轻松检索另一个元素中的集合,getElementsByClassName 方法需要考虑它认为整个 HTMLDocument 是什么,即使你欺骗了它这样认为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vba、getElementsByClassName、HTMLSource的双引号不见了 的相关文章

  • 复制两个 Excel 实例之间的范围

    我正在运行两个单独的 Excel 实例 并且尝试将数据从一个工作簿中的范围复制到另一个工作簿中 我有这个代码 Sub CopyValues Dim xlApp As Excel Application Set xlApp GetObject
  • Excel VBA 组合框识别

    我的用户表单上有 4 个以上的组合框 当他们触发时 他们触发相同的事件 我想做的是找出哪个 ComboBox 触发了该事件 组合框的创建取决于组件的数量 生成组合框的代码如下所示 For j 0 To UBound ComponentLis
  • 在php中将excel转换为xml

    我想读取 Excel 文件并根据该数据创建 XML 文件 在php中可以吗 Thanks 快速谷歌搜索发现this PHP https github com PHPOffice PHPExcelCodePlex 上的项目 您可能想看一下 它
  • EPPlus / 如何从数据透视表获取数据?或者说如何轻松操作数据?

    我在处理报告中的数据上浪费了很多时间 使用数据透视表是个好主意 但是如何呢 我尝试了一些免费的PivotTable类 但缺少小计 然后 另一种方法 为了excel我正在使用的报告的输出EPPlus 它还支持数据透视表 问题是我们的一些客户没
  • 如何同时在多个 Wksheet 中搜索某个字符串?

    我有大约 30 张工作表 我希望这些代码同时运行 我想找到 ABC 并删除所有工作表中它旁边的单元格的值 我的错误来自 Set rSearch range A1 range A rows count end x1up 当我在 With 语句
  • 我怎样才能优化这个vba循环代码?

    嗨 我写了这段代码 但这段代码非常慢 我该如何优化这段代码 Private Sub printItem r lastCol objStream FirstCol 1 Dim strFirst As String strFirst CStr
  • 基于两列值的VLOOKUP

    我有一个表 其中一列包含用户 ID 这些被多次输入以显示特定主题的结果 ID Topic Pass Fail 71086686 Science P 71086686 Maths P 71086686 Tech P 71086686 ICT
  • 大型数据集的报告工具/查看器

    我有一个数据处理系统 可以根据其处理的数据生成非常大的报告 我所说的 大 是指该系统的 小 执行在转储到 CSV 文件中时会产生大约 30 MB 的报告数据 而大数据集大约为 130 150 MB 我确信有人有更大的想法 大 但这不是重点
  • Excel 2010 中隐藏行的宏

    我对 VBA 编程有点陌生 我在互联网上阅读了一些内容 但找不到我需要的内容或无法使其正常工作 我的问题 在工作表 表 1 的单元格 B6 中 给出了项目将被利用的年数 在工作表 sheet 2 和 sheet 3 中 我制作了 50 年的
  • 创建具有子级别的类属性

    我一直在读这个topic https excelmacromastery com vba class modules A Quick Guide to the VBA Class Module关于如何使用类模块 我的目标是提高代码性能和可读
  • MS Access:将组合框中选定的条目插入表中

    这是我使用 MS Access 所做的一个示例 我有一个包含人名的表格和两个用于添加电话号码的文本字段 我创建了一个包含名称的列表框 我设法将列表框中选定的姓名和文本字段 Tel1 和 Tel2 中的电话号码插入表 ContactTable
  • 如何在没有任何数据行的情况下读取 Excel 表/ListObject 中的计算列的公式

    我有一个以外部查询作为数据源的 ListObject 它返回 18 列 ListObject 之前已添加了额外的 4 个计算列 现在 ListObject 有 0 个数据行 但是 虽然有 0 个数据行 但我似乎无法读取计算列的预定义公式 如
  • 是否可以编写自定义 Power Query 连接器?

    在 来自其他来源 下的 Power Query 中 我们看到许多专业提供商 Facebook SAP SalesForce 等 我有兴趣编写一个自定义提供程序来访问无法通过任何内置连接器使用的本地专有数据存储 我知道 访问没有支持连接器的数
  • 在 VBA 中调用批处理文件无法正常工作

    我正在尝试创建一个可供其他人使用的程序 目前 我的文件位于目录中C Documents and Settings jpmccros Desktop test 该目录包含我的macro xlsm names bat 还有另一个子目录名为Dat
  • 在 VBA 中声明字典

    我收到错误Run time error 424 Object required当我尝试在 VBA 中创建字典时 我的代码如下所示 Private Sub data Dim dicti As Object Set dicti CreateOb
  • 使用字符串数组作为子字符串参数的 VBA InStr 函数 (Excel)

    找了很久了 第一次提问 目标 循环遍历包含地址的列 根据单元格包含的邮政编码为单元格偏移 0 6 分配一个值 城市名称 这是我到目前为止所得到的 缩短的数组长度 Sub LabelCell Dim SrchRng As Range cel
  • 条件格式化VBA多个条件

    我对 VBA 世界非常陌生 需要一些关于条件格式的 VBA 方面的帮助 1 我需要将条件格式应用于列 M 7岁以下绿色 黄色从7 20 红色大于20 最重要的条件是 如果列 N 声明 NOPO 则我不希望应用条件格式 我已经制定了一个公式来
  • Hyperlinks.add VBA [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在用 VBA 编程 我想使用创建超链接hyperlink addActiveSheet 对象的方法 但是它不起作用 这是我的代码 set
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works

随机推荐

  • 在主页上显示类别及其产品,Magento 1.9

    我想在主页上显示一个类别及其产品 Magento 内置了在主页上显示新产品的选项 但我不知道如何在主页上显示不同的类别 例如我创建了一个类别 我想在主页上显示该类别中的产品 如下所示 特色产品 产品1 产品2 产品3 我已经尝试过下面的代码
  • 如何更改 perf_event_open 最大采样率

    我正在使用 perf event open 来获取样本 我试图让每个人都切中要害 但 perf event open 不够快 我尝试使用以下命令更改采样率 echo 10000000 gt proc sys kernel perf even
  • 权限被拒绝(公钥)。致命:无法从远程存储库读取

    我的中有以下内容 git config 1 core 2 repositoryformatversion 0 3 filemode true 4 bare false 5 logallrefupdates true 6 remote ori
  • Java 8 在分组时不保持顺序

    我正在使用 Java 8 按数据分组 但获得的结果并不是按顺序形成的 Map
  • 将 NSUInteger 添加到 NSMutableArray

    您好 我正在开发一个项目 我正在尝试将 NSUInteger 添加到 NSMutableArray 中 总的来说 我对 Objective C 和 C 都很陌生 当我运行应用程序时 NSLog 显示 null 我将不胜感激任何人能够提供的任
  • 滑动切换下一个元素

    我想要 5 个 p 单击时显示的标签 p div 那是在下面 我可以在我命名每个的地方做到这一点 p 和每个 p div 不同 但这会导致很多 jQuery 所以 目前我有 p class flip Example p div class
  • 如何从应用程序对 Xcode 项目进行逆向工程?

    Xcode 删除了我的项目 一切都消失了 我唯一拥有的是 iPhone 6 中的应用程序 那么有什么方法可以检索应用程序的 Xcode 项目呢 Update 我找到了所有文件 现在我只需要在新项目中重新组装它们 但我不知道怎么办 让我们明确
  • C# 线程暂停和恢复

    我有多个线程 如何暂停 恢复它们 来自重复的问题 我如何暂停 5 个线程 并记住它们的状态 因为其中一个在吃 另一个在思考 等等 如果您正在使用System Threading Thread 然后你可以打电话Suspend and Resu
  • Python 并行迭代列表?

    我创建了一个列表 其中包含不超过 8 个项目 现在我使用标准 for 循环 for item in list 循环该项目 我想知道是否有一种方法可以准确检查所有元素同时 我看过一些关于使用 zip 同时迭代 2 个列表的帖子 这可能会有所帮
  • 在 JavaScript 中高效解析电子邮件正文

    我需要解析多个电子邮件正文 如下所示 Name Bob smith Email email protected Phone Number 4243331212 作为较大程序的一部分 我有以下函数来解析页面 function parseBod
  • ScrollView 中的可缩放 TextView

    我想做一个TextView可以根据捏缩放来更改文本的大小 这TextView是在一个里面ScrollView 我有TextView捏合时缩放 但仅当您几乎完全水平地移动手指时 如果捏缩放有垂直组件 则默认为滚动而不是缩放 有没有办法禁用滚动
  • 如何将QPushButton插入TableView?

    我正在实施QAbstractTableModel我想插入一个QPushButton在每行的最后一列 当用户单击此按钮时 将显示一个新窗口 其中包含有关此行 的更多信息 您知道如何插入按钮吗 我了解委托系统 但所有示例都只是关于 如何使用组合
  • 在 r 中收集多列数据

    我有一些数据 我正在尝试使用 tidy R 和 R 中更长的函数来获取输出 如下所述 但我无法做到这一点 我正在获取数据 我有这种格式的数据 还有许多其他列名称 Country State Year 1 Population 1 Year
  • 如何将cucumber集成到testNG中?

    我有一个用于由核心 JAVA TestNG 创建的框架 该框架遵循TDD模型 POM是我们的构建管理工具 有人可以告诉我是否有可能使用 Cucumber 将框架从 TDD 更新为 BDD 但我仍然想对这个要求做最小的改变 比如不改变任何现有
  • 尝试在 DF 的切片副本上设置值

    我正在用 pandas 和 python 做一些事情 我有下一个代码 df pd read csv Request csv keep default na False df1 df loc df Request Status Closed
  • 为什么这个 preg_replace 调用返回 NULL?

    为什么这个调用返回NULL 正则表达式错误吗 随着test输入它不返回NULL 文档说 NULL 表示错误 但它可能是什么错误 s hex2bin 5b5d202073205b0d0a0d0a0d0a0d0a2020202020202020
  • 如何使用以用户定义类型为键的 std::maps ?

    我想知道为什么我不能将 STL 映射与用户定义的类一起使用 当我编译下面的代码时 我收到以下神秘的错误消息 这是什么意思 另外 为什么它只发生在用户定义的类型上 原始类型用作键时是可以的 C MinGW bin lib gcc mingw3
  • 在 Woocommerce 中将结帐国家/地区下拉菜单设置为只读

    I want country dropdown on woocommerce as readonly 我已经将默认国家 地区设置为澳大利亚 但我希望它们是只读的 Kashalo 的答案是正确的 您还可以使用其他多种方法之一 1 仅适用于结帐
  • 使用 Unix 工具解析 JSON

    我正在尝试解析从curl请求返回的JSON 如下所示 curl http twitter com users username json sed e s g awk v k text n split 0 a for i 1 i lt n i
  • vba、getElementsByClassName、HTMLSource的双引号不见了

    我用 VBA 抓取一些网站是为了好玩 我使用 VBA 作为工具 我使用 XMLHTTP 和 HTMLDocument 因为它比 internetExplorer Application 更快 Public Sub XMLhtmlDocume