没有id VBA的网页抓取

时间:2015-06-25 13:53:09

标签: html vba web-scraping screen-scraping

我正在尝试刮网,有些元素很容易搞定。但我对那些没有这种身份的人有一个问题。

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

一些提示?

2 个答案:

答案 0 :(得分:1)

在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>

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

答案 1 :(得分:0)

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

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

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

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

其中说同样的事情,即选择具有ClassName "Title1"的元素。

首先只需使用:

document.querySelector(".Title1")

对于所有匹配的

的nodeList
 document.querySelectorAll(".Title1") 

然后迭代它的长度。

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

对于显示的代码段,假设该项是页面上的第一个.Title1,CSS选择器会从您的HTML中检索以下内容

CSS query

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

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