没有 id VBA 的网页抓取

Web scraping without id VBA

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

<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 给了我一个错误:/..

有小费吗?

在VBA

中使用正则表达式XMLHttpRequest对象

前段时间我做了一个 AddIn 就是这样做的:

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>

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

您没有指定错误,HTML 无法知道页面上有多少元素。

您可能忘记了对 document.getElementsByClassName("Title1") 使用索引,因为它 returns 是一个集合

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


以同样的方式,您可以使用 CSS 查询选择器,例如 .Title1

这表示相同的事情,即 select ClassName 为 "Title1" 的元素。

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

document.querySelector(".Title1")

对于所有匹配的nodeList

 document.querySelectorAll(".Title1") 

然后遍历它的长度。


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


对于显示的代码段,假设该项目是 CSS select 页面上的第一个 .Title1 或者从您的 HTML

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

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