从多个网站页面中提取数据到excel

时间:2017-10-31 15:17:01

标签: excel vba

我试图从以下网址获取数据:

" http://www.css.ethz.ch/en/services/css-partners.html?page=1"到" ... page = 180"

(2691结果/ 180页)到Excel中作为三列(名称,国家/地区,描述)作为一个关闭,以便在本地保存相同的信息并使搜索更快。

我认为VBA可以很容易地做到这一点,但我对它很陌生并且不知道从哪里开始:S赞赏任何指针!

1 个答案:

答案 0 :(得分:1)

我在工作中设置了这样的东西。

我使用了this reference。我建议你阅读它。

的制备:将

  1. 获取您定位的页面部分的计算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>
    
  2. 最好先了解文档对象模型以及如何使用JavaScript遍历它,特别是使用查询选择器,子节点等; Microsoft IE界面在某种程度上反映了它。例如在JavaScript中:

    var articles = document.querySelectorAll("div.articleBox.navigation > article")
    
  3. 添加对&#34; Microsoft Internet Controls&#34;的引用和#34; Microsoft HTML对象库&#34;到您的VB项目。

  4. 子:

    1. 在内存中初始化并打开Internet Explorer。

      Dim ie as New InternetExplorer
      
    2. 导航到该页面。

      ie.Navigate "http://www.css.ethz.ch/en/services/css-partners.html?page=1"
      
    3. 等到页面加载完毕。

      Do While ie.ReadyState <> READYSTATE_COMPLETE
          DoEvents
      Loop
      
    4. 遍历页面的文档对象模型并根据需要存储相关详细信息。

      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
      
    5. 将相关详细信息写入范围。

      Range("A1") = divs(0).innerText
      Range("B1") = divs(1).innerText
      Range("C1") = divs(2).innerText
      
    6. 在文章元素和循环页面中循环(未显示)。

    7. 关闭并销毁Internet Explorer的实例。

      ie.Quit
      Set ie = Nothing
      
    8. 放在一起:

      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中的相应范围