【问题标题】:Access Denied error on GETHTML functionGETHTML 函数上的访问被拒绝错误
【发布时间】:2023-04-08 01:17:01
【问题描述】:

我正在尝试从网站上抓取一些数据,但我在主搜索页面上收到此错误:

在 GETHTML() 函数中的 .send 上的访问被拒绝(运行时错误 -2147024891 (80070005) 错误。

这是我的代码:

Function GetHTML(URL As String) As String
    Dim HTML As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        GetHTML = .responseText
    End With
End Function

Function GetNumberofPages(numpage As String)

    Dim oHtml       As HTMLDocument
    Dim oElement    As Object
    Set oHtml = New HTMLDocument
    Dim maintext2 As String


    gr = ""

    'maintext2 = "http://www.simplycigars.co.uk/advanced_search_result.php?search_in_description=1&inc_subcat=1&pfrom=0&pto=10000&sort=2a&display=all"
    Text = GetHTML(maintxt)
    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        .Open "GET", maintxt & gr, False
        .send
        oHtml.body.innerHTML = .responseText
    End With

    aa = InStr(1, Text, "Displaying")

    nmpage = Val(Mid(Text, aa + 66, 5))
    GetNumberofPages = nmpage

End Function

我做错了什么?

【问题讨论】:

标签: vba web-scraping


【解决方案1】:

根据这个答案...

https://stackoverflow.com/a/36292949/3043

...您需要MSXML2.ServerXMLHTTP.6.0 对象而不是MSXML2.XMLHTTP。您在这里已经有了使用 5.1 的示例代码;这也可能有效。

更改对象确实对我有用。但是,我使用 VBScript 而不是 VBA 进行了测试。此外,该代码是 .Net 和经典 VB 的字符串混合。在VBScript中测试时,我不得不使用这个函数:

Function GetHTML(URL)    
    With CreateObject("MSXML2.ServerXMLHTTP.6.0")
        .Open "GET", URL, False
        .send
        GetHTML = .responseText
    End With
End Function

最后,像这样抓取 HTML 并不是一个好主意。相反,寻找您可以使用的 rss 提要或 api,即使这意味着通过 HTML 跟踪以查找用于填充页面的 JSON 数据。

这将使您的程序对网站的设计更改更具弹性,运行速度更快,并为网站所有者使用更少的带宽和资源。有时这些东西不存在,这里可能就是这种情况,但值得经常重复。

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2010-10-24
    • 2012-12-21
    • 2010-12-23
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多