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 2003 中的 IFERROR

    我通过阅读几个线程了解到IFERROR在 Excel 2003 中由IF ISERROR 我尝试从 Excel 2007 复制的代码是 IFERROR A1 我知道必须有一个简单的解决方案将其转换为IF ISERROR 但我没有任何效果 意
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 在 Excel 中生成随机 -1 和 +1 值

    The Rand 函数会生成一个 0 到 1 之间的实数 这Randbetween 1 1 将生成 1 0 或 1 我想要的只是 1或1 那么 1 到 1 之间的实数呢 Easy IF RAND lt 0 5 1 1 要获得实数 请使用 R
  • 使用 split 函数到数组中会导致编译错误:无法分配给数组

    我正在尝试使用split 函数根据给定名称字符串中的空格拆分名称 当尝试编译我在下面编写的代码时 出现编译错误 无法分配给数组 我几乎从这里复制了微软的示例 https support microsoft com en us kb 2662
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • 将 MS 转换为秒

    我发现这个公式可以用来将 MS 转换为秒 但它是为 Excel 2002 编写的 而我正在使用 2010 CONCATENATE TEXT INT B1 1000 86400 hh mm ss B1 INT B1 1000 1000 以下是
  • 在 Excel 中自动复制和粘贴特定范围的最佳方法是什么?

    我对 VBA 非常陌生 我想自动化一项任务 但不知道从哪里开始 我有一个如下所示的数据集 样本数据 https i stack imgur com jxqFI png 我想做的是循环遍历 A 列 如果其中有内容 始终是电子邮件 请选择所有行
  • Vlookup 引用不同工作表中的表数据

    我想用一个VLOOKUP函数引用了放置在与所在工作表不同的工作表中的数据表VLOOKUP书面的功能 示例 在工作表 1 的单元格 AA3 中 我想插入VLOOKUP功能 我希望该函数检查单元格 M3 中的数字 在工作表 2 范围地址 A2
  • 从Excel工作表中读取汉字? (总是返回“???”)

    如何从Excel单元格中读取汉字并将其写入文件 当我取值时 Worksheets ActiveCell Worksheet Name Cells 3 columnNumbers 0 value 它总是返回 Dim fileStream Fi
  • 计算序列中的重复值

    如何使用Excel计算列中的重复数据 Example A B apple 1 apple 2 apple 3 ball 1 bat 1 dog 1 dog 2 gole 1 gole 2 gole 3 gole 4 我认为对于你的情况中的所
  • Excel 接受一些字符,而 OpenXml 有错误

    我有一个字符串 我想使用 C 中的 openxml 组件将其导出到 Excel 文件 我的文本有 u001f 字符 而 openxml 对此字符有错误 错误文本 十六进制值 0x1f 是无效字符 我将该测试直接复制到 Excel 中 没有问
  • Pandas.read_excel 有时会错误地将布尔值读取为 1/0

    我需要将一个非常大的 Excel 文件读入 DataFrame 中 该文件包含字符串 整数 浮点和布尔数据 以及丢失的数据和完全空的行 还值得注意的是 某些单元格值源自单元格公式和 或 VBA 尽管理论上这不会影响任何内容 正如标题所示 p
  • Office 365 中 Excel 中 Power Pivot 的计算列中正确的 DAX GROUPBY 语法是什么

    将以下语法输入到下面在 Excel Office 365 版本 的 powerpivot 中提供的表 Visits 的计算列公式中 GROUPBY Visits Patient Name First Visit Date MINX CURR
  • 字符串在换行符处拆分

    我在 MS Access 表单上有一个文本框 用户将从 Excel 电子表格中复制一列数字到其中 我需要获取此输入并将其用作参数来构建查询 我的代码看起来像这样 Dim data as variant Dim input as String
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • Python循环遍历Excel工作表,将工作表名称添加到列表中,然后连接所有

    我正在循环遍历 Excel 工作表并将它们附加到列表中 循环完成后 我使用 Pandas 连接到单个数据帧 我遇到的问题是将工作表名称添加到适当的列表中 infile is a filepath variable xls xlrd open
  • 如何根据单元格的值更改单元格的格式和文本。 (条件格式)

    您好 我想根据单元格的值更改单元格的填充颜色和文本 假设我有以下价值观 我想让它像这样 对我来说 填充颜色很简单 因为我只需执行条件格式即可 然而 文字却让事情变得困难 如何将单元格值更改为文本 如上面的示例 谢谢 为颜色创建条件格式规则
  • 行编号选择自动填充直到最后[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含数千行的表 我想通过在第一行旁边添加 1 2 3 来对行进行编号 然后选择这些行并拖动到最后以使用递增的数字进行填充 如何自动
  • VBA将二进制图像转换为网页的base64编码字符串

    我正在尝试读取 JPG 文件并将该文件转换为 base64 编码的字符串 该字符串可用作网页上的嵌入 jpeg 我在网上发现了两个在 VBA 中进行 Base64 编码 解码的函数 它们似乎被广泛接受 编码 解码过程产生了我的原始二进制字符
  • 从 Excel 应用程序对象中查找位数(32 位/64 位)?

    是否可以从 Microsoft Office Interop Excel ApplicationClass 确定 Excel 是以 32 位还是 64 位运行 Edit该解决方案应该适用于 Excel 2010 和 Excel 2007 此

随机推荐

  • 在主页上显示类别及其产品,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