【问题标题】:Retrieve Website Data Excel VBA检索网站数据 Excel VBA
【发布时间】:2017-11-02 01:57:04
【问题描述】:

首先,我对 VBA 非常陌生,并且仅对在线提出的其他问题的解决方案有所了解。我有一个宏,它可以打开 IE 到指定的 URL,在搜索中输入文本,加载结果,然后通过更具体的搜索值循环搜索。

我想要做的是将搜索结果刮到 excel 中。但是,结果不会出现在生成的 HTML 代码中,而是看起来是由网站上的脚本生成的。

我正在搜索的页面示例: https://www.gamestop.com/PickUpAtStore/75083/0/917850

加载时会在页面上找到结果,但不会在页面源中找到。查看页面源代码,似乎有一个将结果拉入的脚本:

<script id="stores" type="text/x-handlebars-template">
{{#if this}}
<ul>
    {{#each this}}
    <li id="{{StoreNumber}}|{{#if true}}917850 {{/if}}" class="{{#if false}}checkOnly{{/if}}"">

        <div class="fluidWrapper ats-storelist" id="{{StoreNumber}}">
            <div class="contactInfo">
                <div class="title ats-storetitle">{{DisplayName}}</div>
                <div class="address ats-storeaddress">
                    {{{AddressStreet}}}<br />{{AddressCityStateZip}}
                </div>
                <div class="phoneNumber ats-storephone">
                    {{Phone}}
                </div>
            </div>
            <div class="rightInfo">
                <div class="distance ats-storedistance">{{Distance}} {{#if true}}<i id="showHoldOptions_{{StoreNumber}}" class="{{#if false}} plus_{{/if}}icon"></i>{{/if}}</div>
            </div>
        </div>
..................

理想情况下,我希望在加载结果时将商店名称、地址和电话号码放入 Excel,从 A4、B4、C4 开始,并将每个商店添加到下一行。

我是否在寻找完全错误的地方来获取这些结果?感谢您为解决此问题提供的任何帮助。

编辑添加当前宏:

Sub Search_Cell()

Dim ie As Object
Dim lRow As Long
Dim URL As Range

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True

For Each URL In Range("B1")
ie.navigate URL.Value
Application.StatusBar = "Submitting"
While ie.Busy
    DoEvents
Wend
Next

For lRow = 1 To 89

With ie.document
.all("puas_search").Value = Sheets("Zipcodes").Range("A" & lRow).Value
.getElementById("puas_search").Focus
End With

Application.SendKeys ("~")
Application.Wait Now + #12:00:02 AM# 'wait 2 seconds

   ' Get results of search

   ' Add Store name to A4, Address to B4, Phone# to C4 (but for following searches start at the next empty row)

   ' Add following results to next row


Next lRow 'loop to next search


ie.Quit
Set ie = Nothing

MsgBox "Done"

End Sub

【问题讨论】:

  • 你现有的代码现在是什么样子的?我answered a very similar question recently。使用 IE 对象,它应该能够读取生成的 html(不关心源)。
  • @Tigregalis 使用 html 报废,OP 将只检索 {AddressStreet} 并且他想要它给出的值而不是 {AddressStreet}。我认为仅通过 html 报废是不可能获得这些数据的。
  • @danieltakeshi 这不是 HTML 抓取,而是 DOM 遍历。我说的是“生成的 HTML”,但我真正的意思是 DOM。 IE 对象让我们可以遍历 DOM - 地狱,如果我们愿意,我们可以使用它来自动提交表单。
  • @Tigregalis 我添加了我当前的宏,它“有效”但结果是手动捕获的。我曾尝试过其他解决方案来解析和获取 div 标签,但最终没有奏效。不幸的是,我没有保存失败的代码部分。

标签: vba excel internet-explorer automation


【解决方案1】:

我解决了这个问题,我认为无法从 html 中抓取结果是完全错误的。感谢@Tigregalis 将我推向正确的方向。

这是提取我需要的数据的代码的 sn-p,将其放在 excel 中的正确位置,然后移动到下一行。

    Set HTMLDoc = IE.document

    Set Stores = HTMLDoc.getElementsByClassName("contactInfo")

    For Each Store In Stores
        ColNum = 1

        For Each Name In Store.Children

            Cells(RowNum, ColNum) = Name.innerText
            ColNum = ColNum + 1

        Next Name
        RowNum = RowNum + 1

    Next Store

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多