【问题标题】:Web scraping without id VBA没有 id VBA 的网页抓取
【发布时间】:2015-06-25 13:53:08
【问题描述】:

我正在尝试抓取网页,有些元素很容易获得。但我对那些没有这种身份证的人有意见。

<TABLE class=DisplayMain1 cellSpacing=1 cellPadding=0><TBODY> <TR class=TitleLabelBig1> <TD class=Title1 colSpan=100><SPAN style="FONT-FAMILY: arial narrow; FONT-WEIGHT: normal">Tool &amp; </SPAN><BR>PE311934-1-1 </TD></TR></TBODY></TABLE>

我想要这个 ---►PE311934-1-1

我尝试使用“document.getElementsByClassName”,但 vba 给了我一个错误:/..

一些提示?

【问题讨论】:

    标签: html vba web-scraping screen-scraping


    【解决方案1】:

    在 VBA 中使用 正则表达式 和 XMLHttpRequest 对象

    我前段时间做了一个插件,就是这样做的:

    http://www.analystcave.com/excel-tools/excel-scrape-html-add/

    如果你只想要源代码,那么这里(GetElementByRegex 函数):

    http://www.analystcave.com/excel-scrape-html-element-id/

    现在实际的正则表达式将非常简单:

    </SPAN><BR>(.*?)</TD></TR></TBODY></TABLE>
    

    如果它捕获的项目太多,只需扩展正则表达式。

    【讨论】:

    • 我会试试这个,tks
    • 如果这解决了您的问题/问题,请标记为答案
    【解决方案2】:

    您没有指定错误,并且没有足够的 HTML 来知道页面上有多少元素。

    您可能忘记在document.getElementsByClassName("Title1") 中使用索引,因为它返回一个集合

    例如,第一项是:document.getElementsByClassName("Title1")(0)


    同样,您可以使用 CSS querySelector,例如 .Title1

    这说明了同样的事情,即选择具有 ClassName "Title1" 的元素。

    对于第一个实例,只需使用:

    document.querySelector(".Title1")
    

    对于所有匹配的nodeList

     document.querySelectorAll(".Title1") 
    

    然后遍历它的长度。


    您通常可以访问元素的.innerText 属性来检索所需的字符串。


    对于所示的 sn-p,假设该项目是页面上的第一个 .Title1,CSS 选择器会从您的 HTML 中检索以下内容

    然后可以根据需要处理结果字符串。考虑到更新的源页面很容易破坏这些方法,这种方法和正则表达式充其量是脆弱的。

    在您上面的示例中,您可以使用类名.Title1,然后使用Replace() 删除Tool &amp;。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 2019-12-17
      • 2015-09-17
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2017-02-25
      相关资源
      最近更新 更多