我一直在尝试使用R爬取本地政府的Power BI仪表板,但似乎这是不可能的。我从Microsoft网站上读到,无法爬取Power BI仪表板,但我正在查阅几个论坛,显示这是可能的,但我卡在了一个循环中。
我正在尝试从此仪表板中爬取“邮政编码”选项卡数据。 我尝试了下面给出的代码中的几种“技巧”。
但是当我使用xpath获取
我正在尝试从此仪表板中爬取“邮政编码”选项卡数据。 我尝试了下面给出的代码中的几种“技巧”。
scc_webpage <- xml2::read_html("https://app.powerbigov.us/view?r=eyJrIjoiZDFmN2ViMGEtNzQzMC00ZDU3LTkwZjUtOWU1N2RiZmJlOTYyIiwidCI6IjNiMTg1MTYzLTZjYTMtNDA2NS04NDAwLWNhNzJiM2Y3OWU2ZCJ9&pageName=ReportSectionb438b98829599a9276e2&pageName=ReportSectionb438b98829599a9276e2")
# Attempt using xpath
scc_webpage %>%
rvest::html_nodes(xpath = '//*[@id="pvExplorationHost"]/div/div/exploration/div/explore-canvas-modern/div/div[2]/div/div[2]/div[2]/visual-container-repeat/visual-container-group/transform/div/div[2]/visual-container-modern[1]/transform/div/div[3]/div/visual-modern/div/div/div[2]/div[1]/div[4]/div/div/div[1]/div[1]') %>%
rvest::html_text()
# Attempt using div.<class>
scc_webpage %>%
rvest::html_nodes("div.pivotTableCellWrap cell-interactive tablixAlignRight ") %>%
rvest::html_text()
# Attempt using xpathSapply
query = '//*[@id="pvExplorationHost"]/div/div/exploration/div/explore-canvas-modern/div/div[2]/div/div[2]/div[2]/visual-container-repeat/visual-container-group/transform/div/div[2]/visual-container-modern[1]/transform/div/div[3]/div/visual-modern/div/div/div[2]/div[1]/div[4]/div/div/div[1]/div[1]'
XML::xpathSApply(xml, query, xmlValue)
scc_webpage %>%
html_nodes("ui-view")
但是当我使用xpath获取
类和id时,总是得到一个输出,显示为
这将是输出结果,留下我需要的空白块:
我猜问题可能是因为数字在一系列嵌套的
如果这在R中可行,或者可能使用Selenium在Python中完成,任何帮助都将不胜感激!
character(0)
,甚至在尝试通过html_nodes
进行操作时也会出现{xml_nodeset (0)}
。奇怪的是,当我执行以下操作时,它不会显示tableau数据的整个html:scc_webpage %>%
html_nodes("div")
这将是输出结果,留下我需要的空白块:
{xml_nodeset (2)}
[1] <div id="pbi-loading"><svg version="1.1" class="pulsing-svg-item" xmlns="http://www.w3.org/2000/svg" xmlns:xlink ...
[2] <div id="pbiAppPlaceHolder">\r\n <ui-view></ui-view><root></root>\n</div>
我猜问题可能是因为数字在一系列嵌套的
属性中?
我试图获取的主要数据是表格中显示的邮政编码
、确诊病例
、% 总病例
、死亡人数
和% 总死亡人数
的数字。如果这在R中可行,或者可能使用Selenium在Python中完成,任何帮助都将不胜感激!
wdman
也许可以帮助你下载所需的所有二进制文件。不过这需要你自己去研究,因为我只有使用 Chrome 的经验。 - alex_jwb90install.packages('netstat')
,然后port = free_port()
应该可以工作,这样您就不必每次都输入新的端口。 - KendalquerySelector("<HERE>")
中,就像上面一样,在您的R代码中提取那个确切的元素)。对于页面底部的KPI,这将起作用... - alex_jwb90querySelectorAll
获取所有感兴趣的节点。您可以使用 xpath 和 css 选择器来执行类似于read_html(remDr$getPageSource()[[1]]) %>% xml_find_first("//div[contains(@aria-label,\"Vaccine doses administered by Week\")]") %>% querySelectorAll("g.labelGraphicsContext > text.label") %>% xml_text()
的操作,该操作利用屏幕阅读器标签找到正确的图表,然后深入挖掘以获取标签文本节点的值。 - alex_jwb90