我试图从以下网址获取数据:
" http://www.css.ethz.ch/en/services/css-partners.html?page=1"到" ... page = 180"
(2691结果/ 180页)到Excel中作为三列(名称,国家/地区,描述)作为一个关闭,以便在本地保存相同的信息并使搜索更快。
我认为VBA可以很容易地做到这一点,但我对它很陌生并且不知道从哪里开始:S赞赏任何指针!
答案 0 :(得分:1)
我在工作中设置了这样的东西。
我使用了this reference。我建议你阅读它。
的制备:将
获取您定位的页面部分的计算HTML(即使用F12开发者控制台)以了解其结构。
<div class="articleBox navigation">
<!-- ... -->
<article>
<div>
<a href="css-partners/partner.html/100775">Aarhus University (AU)<span class="icon"></span></a>
</div>
<div class="nav-hint bold author">Denmark</div>
<div>Aarhus University (AU) is an academically diverse and research-oriented institution that works to solve the complex developmental challenges facing the world.</div>
</article>
<!-- ... -->
</div>
最好先了解文档对象模型以及如何使用JavaScript遍历它,特别是使用查询选择器,子节点等; Microsoft IE界面在某种程度上反映了它。例如在JavaScript中:
var articles = document.querySelectorAll("div.articleBox.navigation > article")
添加对&#34; Microsoft Internet Controls&#34;的引用和#34; Microsoft HTML对象库&#34;到您的VB项目。
子:
在内存中初始化并打开Internet Explorer。
Dim ie as New InternetExplorer
导航到该页面。
ie.Navigate "http://www.css.ethz.ch/en/services/css-partners.html?page=1"
等到页面加载完毕。
Do While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
遍历页面的文档对象模型并根据需要存储相关详细信息。
Dim articles As IHTMLDOMChildrenCollection
Dim article As IHTMLElement
Dim divs As IHTMLElementCollection
...
Set articles = ie.Document.querySelectorAll("div.articleBox.navigation > article")
Set article = articles(0)
Set divs = article.Children
将相关详细信息写入范围。
Range("A1") = divs(0).innerText
Range("B1") = divs(1).innerText
Range("C1") = divs(2).innerText
在文章元素和循环页面中循环(未显示)。
关闭并销毁Internet Explorer的实例。
ie.Quit
Set ie = Nothing
放在一起:
Sub GetSearchResults()
Dim ie As New InternetExplorer
Dim articles As IHTMLDOMChildrenCollection
Dim article As IHTMLElement
Dim divs As IHTMLElementCollection
ie.Navigate "http://www.css.ethz.ch/en/services/css-partners.html?page=1"
Do While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set articles = ie.Document.querySelectorAll("div.articleBox.navigation > article")
Set article = articles(0)
Set divs = article.Children
Range("A1") = divs(0).innerText
Range("B1") = divs(1).innerText
Range("C1") = divs(2).innerText
ie.Quit
Set ie = Nothing
End Sub
我将它留作练习,让您了解如何在页面上的文章元素中循环,如何在要定位的所有页面中循环,以及如何将提取的信息写入Excel中的相应范围