GETHTML函数上的Access Denied错误

时间:2017-03-17 17:10:04

标签: vba web-scraping

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

  

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据这个答案......

  

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数据。

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