Ms access 从url不变的网页源中刮取数据

Ms access 从url不变的网页源中刮取数据,ms-access,url,web-scraping,vba,Ms Access,Url,Web Scraping,Vba,我需要做以下几件事 去 选择特殊医院和所有门诊护理设施**注2 单击搜索 循环浏览列表中的所有医院 点击每家医院 从医院页面获取一些数据 我有两个问题 我不知道如何选择特殊医院和所有门诊护理设施**注2 当我手动选择这两种类型,然后单击一些医院时,URL不会成为特定选择。 当我选择了这两种类型后,它就变成了,当我点击医院时,它就保持这种状态。 因此,我无法编写代码来删除这些页面,因为我不知道如何为每个医院指定URL。 我很抱歉,这必须是一个非常基本的问题,但我无法谷歌任何有用的访问VBA 这是

我需要做以下几件事

选择特殊医院和所有门诊护理设施**注2

单击搜索 循环浏览列表中的所有医院 点击每家医院 从医院页面获取一些数据 我有两个问题

我不知道如何选择特殊医院和所有门诊护理设施**注2 当我手动选择这两种类型,然后单击一些医院时,URL不会成为特定选择。 当我选择了这两种类型后,它就变成了,当我点击医院时,它就保持这种状态。 因此,我无法编写代码来删除这些页面,因为我不知道如何为每个医院指定URL。 我很抱歉,这必须是一个非常基本的问题,但我无法谷歌任何有用的访问VBA

这是从页面中提取数据的代码,我还没有做循环,所以这只是页面后面的源数据的基本提取

Public Function btnGetWebData_Click() 
    Dim strURL
    Dim HTML_Content As HTMLDocument
    Dim dados As Object

    'Create HTMLFile Object
    Set HTML_Content = New HTMLDocument

    'Get the WebPage Content to HTMLFile Object
    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://healthapps.state.nj.us/facilities/acFacilityList.aspx", False
        'http://healthapps.state.nj.us/facilities/acFacilityList.aspx
        .Send
        HTML_Content.Body.innerHTML = .responseText
        Debug.Print .responseText
        Debug.Print HTML_Content.Body.innerHTML
    End With
End Function

它导航到每个结果页面,并在中间返回主页,以便通过单击来利用回发链接

Option Explicit
Public Sub VisitPages()
    Dim IE As New InternetExplorer
    With IE
        .Visible = True
        .navigate "http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#middleContent_cbType_5").Click
            .querySelector("#middleContent_cbType_12").Click
            .querySelector("#middleContent_btnGetList").Click
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim list As Object, i  As Long
        Set list = .document.querySelectorAll("#main_table [href*=doPostBack]")
        For i = 0 To list.Length - 1
            list.item(i).Click

            While .Busy Or .readyState < 4: DoEvents: Wend

            Application.Wait Now + TimeSerial(0, 0, 3) '<== Delete me later. This is just to demo page changes
            'do stuff with new page
            .Navigate2 .document.URL             '<== back to homepage
            While .Busy Or .readyState < 4: DoEvents: Wend
            Set list = .document.querySelectorAll("#main_table [href*=doPostBack]") 'reset list (often required in these scenarios)
        Next
        Stop                                     '<== Delete me later
        '.Quit '<== Remember to quit application
    End With
End Sub
执行回发也是一样的

Option Explicit
Public Sub VisitPages()
    Dim IE As New InternetExplorer
    With IE
        .Visible = True
        .navigate "http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#middleContent_cbType_5").Click
            .querySelector("#middleContent_cbType_12").Click
            .querySelector("#middleContent_btnGetList").Click
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim list As Object, i  As Long, col As Collection
        Set col = New Collection
        Set list = .document.querySelectorAll("#main_table [href*=doPostBack]")
        For i = 0 To list.Length - 1
           col.Add CStr(list.item(i))
        Next
        For i = 1 To col.Count
            .document.parentWindow.execScript col.item(i)
             While .Busy Or .readyState < 4: DoEvents: Wend
            'Do stuff with page
            .Navigate2 .document.URL
            While .Busy Or .readyState < 4: DoEvents: Wend
        Next
        Stop                                     '<== Delete me later
        '.Quit '<== Remember to quit application
    End With
End Sub

问题:您是否能够并且愿意使用不同的服务?另一个选择可能是搜索引擎,而不是试图搜索网站。您可以按州和分类法搜索提供者,因此,例如,您可以在新泽西州查找特殊医院。它们还提供了一种非常容易使用的方法。结果是以JSON格式返回的,所以您必须进行我推荐的解析。哈哈,很有趣。我确实在处理这个文件,我担心它没有我正在寻找的数据,我知道如何解析它:有人帮我用python写了一篇文章。我会检查它是否有,谢谢你的想法!不,它没有。第二个版本很好用!!首先突出显示此行。Document.parentWindow.execScript col.Itemi。这并不重要,第二个似乎能满足我的需要。我是现在接受答案,还是等到我能得到赏金?再次感谢大家!!!!这取决于你。您可以通过不提供赏金来节省自己的代表积分。如果你提供赏金,你可能会得到更好的答案。如果有帮助的话,你可以随时投票。如果你愿意,就接受吧。你有很多选择。重要的是得到一些你认为能可靠地提供你所需要的东西。我对答案很满意,我只是想放弃一些分数,这是一件非常有用的事情!!还有一个愚蠢的问题,我如何获取你循环浏览的页面的源代码?我现在正在玩弄我的旧代码,以插入它,但我想我会问:innerHTML应该是.document.body.innerHTML如果这是你的意思?是的!!你太棒了。那我现在怎么放弃积分呢?一旦我可以发布赏金,它会给你加分吗?我对这个网站不太了解