Ms access 从url不变的网页源中刮取数据
我需要做以下几件事 去 选择特殊医院和所有门诊护理设施**注2 单击搜索 循环浏览列表中的所有医院 点击每家医院 从医院页面获取一些数据 我有两个问题 我不知道如何选择特殊医院和所有门诊护理设施**注2 当我手动选择这两种类型,然后单击一些医院时,URL不会成为特定选择。 当我选择了这两种类型后,它就变成了,当我点击医院时,它就保持这种状态。 因此,我无法编写代码来删除这些页面,因为我不知道如何为每个医院指定URL。 我很抱歉,这必须是一个非常基本的问题,但我无法谷歌任何有用的访问VBA 这是从页面中提取数据的代码,我还没有做循环,所以这只是页面后面的源数据的基本提取Ms access 从url不变的网页源中刮取数据,ms-access,url,web-scraping,vba,Ms Access,Url,Web Scraping,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如果这是你的意思?是的!!你太棒了。那我现在怎么放弃积分呢?一旦我可以发布赏金,它会给你加分吗?我对这个网站不太了解