我想使用Excel XP
从网站中提取信息。
我找到了一些示例代码(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
我尝试使用以下网址(加载为htmldoc
):http://www.immobilienscout24.de/expose/73940554
如果我使用字符串“expose-title”作为id,则该函数返回页面的标题,这很好。
但我怎样才能访问e。 G。信息如价格?
在Html代码中,它看起来像那样。没有ID,如果我尝试使用getelementbyid
的类名“is24qa-kaufpreis”,我会收到一条错误消息。
<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 EUR ?
答案 0 :(得分:2)
有许多不同的方法可以解决这个问题。以下代码显示了基于“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
答案 1 :(得分:2)
这对我有用。 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
答案 2 :(得分:1)
使用
getElementsByTagName("strong")(0).InnerText
表示Kaufpreis;
使用
getElementsByTagName("dd")(0).InnerText
为2.190.000,00欧元。
(0)是相同标签元素的编号,代码中可以有许多具有相同标签名称的条目,以检索它们使用(“tag”)(0),(“tag”)(1) ,...,( “标签”)(N)。
我建议为自动化目的研究有关子元素或子元素的主题。
答案 3 :(得分:1)
还要记住Excel可以自己进行Web查询。在数据上 - 导入外部数据 - 新建Web查询菜单(Alt + D,D,W)。然后你会把它称为sheet2!a22或其他什么。对于不断改变其布局的页面来说没有好处。
答案 4 :(得分:1)
.querySelector方法,以应用dd[class='is24qa-kaufpreis']
这表示获取标签名称为dd
且属性为i class
的{{1}}的第一个元素。 s24qa-kaufpreis'
表示属性。
CSS查询:
VBA:
"[]"
您需要获取HTMLDocument对象,但其他答案对此已经显示出了解决方法。