在VBA中parsingHTML以从描述列表中提取信息?

我想用Excel XP从网站中提取信息。

我find了一些示例代码( http://www.wiseowl.co.uk/blog/s393/scrape-website-html.htm )并尝试了以下内容:

 Function strHtmlElementValue(htmldoc As HTMLDocument, id As String) As String Dim HtmlElement As IHTMLElement Set HtmlElement = htmldoc.getElementById(id) strHtmlElementValue = id & ": " & HtmlElement.innerText End Function 

我试着用下面的URL(加载为htmldoc ): http : //www.immobilienscout24.de/expose/73940554

如果我使用string“expose-title”作为id,函数返回页面的标题,这很好。

但是我怎样才能访问像价格这样的信息呢?

在Html代码中,它看起来像这样。 没有ID,如果我尝试使用getelementbyid的类名“is24qa-kaufpreis”, getelementbyid收到错误消息。

  <dl> <dt> <strong class="is24qa-kaufpreis-label"> Kaufpreis: </strong> </dt> <dd class="is24qa-kaufpreis"> 2.190.000,00 EUR </dd> </dl> 

那么,有没有办法直接访问这个“is24qa-kaufpreis”字段,并读出内部文本(在这种情况下是2.190.000,00欧元

有很多不同的方法可以解决这个问题。 以下代码显示了基于“getElementsByTagName”的两种方法。 在网页的源代码中,如果您可以计算div“dd”kaufpreis所在的实例,那么您可以使用第一种方法。 下面显示了一个更一般的方法。

 Sub test() my_url = "http://www.immobilienscout24.de/expose/73940554" Set html_doc = CreateObject("htmlfile") Set xml_obj = CreateObject("MSXML2.XMLHTTP") xml_obj.Open "GET", my_url, False xml_obj.send html_doc.body.innerhtml = xml_obj.responseText Set xml_obj = Nothing k_pice = html_doc.body.getElementsByTagName("dd")(0).innertext ' Or Set Results = html_doc.body.getElementsByTagName("dd") For Each itm In Results If InStr(1, itm.outerhtml, "EUR", vbTextCompare) > 0 Then k_price = itm.innertext Exit For Else End If Next End Sub 

这对我有效。 IE11,但应该与IE9 +。

 Sub TestGEBCN() Dim doc As New MSHTML.HTMLDocument, html, els html = "<dl><dt><strong class=""is24qa-kaufpreis-label"">Kaufpreis:" & _ "</strong></dt><dd class=""is24qa-kaufpreis"">" & _ "2.190.000,00 EUR</dd></dl>" doc.body.innerHTML = html Set els = doc.getElementsByClassName("is24qa-kaufpreis") Debug.Print els(0).innerText End Sub 

使用

 getElementsByTagName("strong")(0).InnerText 

为Kaufpreis;

使用

 getElementsByTagName("dd")(0).InnerText 

为2.190.000,00欧元。

(0)是同一个标签元素的编号,在代码中可以有多个具有相同标签名称的条目,来检索它们的用法(“tag”)(0),(“tag”)(1),.. 。,( “标签”)(N)。

我build议研究有关自动化目的的子元素或子元素的主题。

另外请记住,Excel可以做它自己的网页查询。 在数据导入外部数据 – 新buildWeb查询菜单上(Alt + D,D,W)。 那么你会把它称为sheet2!a22或其他什么。 对于一个不断改变其布局的页面来说,这并不好。