如何解决使用 R 从动态网站中的交互式嵌入式弹出窗口中抓取信息
我正在尝试从一个动态网站抓取那些黄色小车的信息:Trunk road gritter tracker
这是一个包含许多黄色汽车的动态网站,每辆车都有自己的信息,如“车辆”、“年龄(范围)”、“来源日期”等。当你点击汽车时,信息会弹出。
但是,我一次只能点击打开一辆车的信息栏,这意味着我一次只能得到一个特定的弹出数据,相应地,抓取结果也只针对该特定汽车。如何抓取所有汽车的信息栏?
在网页初始状态下,还没有点击汽车,所以我的想法是使用remdr$findelement()函数来导航汽车,然后使用 clickElement() 来模拟点击。点击后会弹出一个窗口,然后使用html_Nodes()和html_text()函数抓取信息。抓取后,模拟点击弹出的关闭按钮。至此,一辆车的抓取完成,再重复这个过程,实现对所有汽车信息的抓取。
我使用了 Rselenium 和 rvest,这是我的代码:
remDr = remoteDriver(remoteServerAddr="localhost",port=4444L,browserName="chrome")
remDr$open(silent = T)
url = "https://www.arcgis.com/apps/webappviewer/index.html?id=2de764a9303848ffb9a4cac0bd0b1aab"
remDr$navigate(url)
image_button = remDr$findElement('xpath',value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']")
image_button$clickElement()
webpage <- read_html(remDr$getPageSource()[[1]])
data <- webpage %>% html_nodes(".attrValue") %>% html_text()
data
但是,有一些问题。当许多汽车在同一页面时,我不知道如何使用 findElement() 导航到汽车。汽车图像的结构如下所示。尽管每个图像都有自己特定的 xPath,但它位于嵌套的 strcutre 中,我无法通过直接搜索该图像 xpath 来成功找到元素。根据这两个答案:Finding SVG Elements using RSelenium and XPath
和 trigger all pop-ups,我使用 remDr$findElement('xpath',value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']")
但这仅在我放大页面以便屏幕上只有一辆车时才有效,我可以获得信息成功,当超过一辆车出现在屏幕上时,将不会返回任何信息。我试过 remDr$findElement()[[1]]
但还是不行。
<svg>
<g id=xxx>
<image></image>
<image></image>
<image></image>
.
.
.
</g>
</svg>
如何一次从不同的弹出窗口中获取所有不同的信息?我的想法可行吗,或者还有其他更简单的方法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。