【问题标题】:Navigate a range of URLs in random order以随机顺序浏览一系列 URL
【发布时间】:2021-01-06 13:37:08
【问题描述】:

我有一系列包含 URL 的单元格。
我使用如下的 for 循环导航到它们以获取数据。
我想添加一些随机性。

With ie
    For j = 2 To 50
        mylink = wks.Cells(j, 2).Value
        .Visible = True
        .Navigate mylink

       'rest of code

    Next
End with

如何选择带有 URL 的单元格,导航到该单元格并转到下一个随机单元格而不再次打开它们?

【问题讨论】:

    标签: excel vba web-scraping


    【解决方案1】:

    您可以尝试以下方法。这将生成一个介于 2 到 50 之间的随机数,测试它之前是否已使用过(通过与已使用值的字典进行比较),然后导航。不过,我不完全确定您为什么要这样做。

    Dim UsedNumber As Object
    Dim RndNumber As Long, MinNumber as long, MaxNumber as long
    Dim j As Long
    
    MinNumber = 2
    MaxNumber = 50
    Set UsedNumber = CreateObject("Scripting.Dictionary")
    
    With ie
        .Visible = True
        For j = MinNumber To MaxNumber
            Do
                RndNumber = Int((MaxNumber - MinNumber + 1) * Rnd + MinNumber)
            Loop While UsedNumber.exists(RndNumber)
            UsedNumber.Add RndNumber, RndNumber
    
            Debug.Print RndNumber
    
            mylink = wks.Cells(RndNumber, 2).Value
    
            .Navigate mylink
        Next j
    End With
    

    【讨论】:

    • 因为我的猜测是,如果我以相同的顺序导航到相同的页面,该网站有一个机制来监视
    • 很公平,如果您要亲自创建 Scraper,我会使用 Python 和 Scrapy 而不是 VBA
    • 我有更多关于 python 的问题 :) 比如我是否可以将我得到的东西导出到 excel 这就是我现在使用 vba 的原因
    • 您可以使用 Python 相当轻松地生成 csv 文件,或者使用 Python 模块来创建工作簿。您可以在 Excel 中打开其中任何一个
    • 将 .Visible 移出循环并使用 .navigate2 会很有用。
    猜你喜欢
    • 2017-05-12
    • 2010-10-18
    • 1970-01-01
    • 2012-11-19
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多