我在尝试从某个页面抓取表格内容时遇到问题。这段代码显示了5张桌子
page <- read_html('https://wybory.gov.pl/sejmsenat2019/pl/kandydaci/sejm/1')
page %>% html_nodes('table')
当指定更多
page %>%
html_nodes('div.con_can')
html_nodes('table')
它下降到一张桌子上,虽然我可以看到至少有8个,全部包裹在div.table-responsive
中,但是在尝试列出它们时
page %>%
html_nodes('div.table-responsive')
html_nodes('table') %>%
我仍然得到一个返回的表({xml_nodeset (1)}
),它不是我感兴趣的任何可见表。
所以问题是:如何在此页面上列出所有具有候选人名称/专业和从属关系的表,和/或如何刮除它们。
答案 0 :(得分:2)
我无法回答以下问题:为什么rvest
无法下载表,但是使用RSelenium
软件包,以下内容应该可以工作,但需要扩展,才能下载所有表。我将使用循环来动态调整表的数量并下载它,但这应该可以帮助您入门。
请确保编码正确。
library(rvest)
library(data.table)
library(httr)
library(XML)
library(RSelenium)
library(dplyr)
mybrowser <- rsDriver(browser = 'firefox')
link <- "https://wybory.gov.pl/sejmsenat2019/pl/kandydaci/sejm/1"
mybrowser$client$navigate(link)
mybrowser$client$findElement(using = 'css selector', "#DataTables_Table_0")$getElementText()
html.table.0 <- mybrowser$client$findElement(using = 'css selector', "#DataTables_Table_0")
html.table.1 <- mybrowser$client$findElement(using = 'css selector', "#DataTables_Table_1")
html.table.2 <- mybrowser$client$findElement(using = 'css selector', "#DataTables_Table_2")
webElem5txt.0 <- html.table.0$getElementAttribute("outerHTML")[[1]]
webElem5txt.1 <- html.table.1$getElementAttribute("outerHTML")[[1]]
webElem5txt.2 <- html.table.2$getElementAttribute("outerHTML")[[1]]
df.table.0 <- read_html(webElem5txt.0) %>% html_table() %>% data.frame(.)
df.table.1 <- read_html(webElem5txt.1) %>% html_table() %>% data.frame(.)
df.table.2 <- read_html(webElem5txt.2) %>% html_table() %>% data.frame(.)
mybrowser$server$stop()
答案 1 :(得分:2)
您看不到它们,因为内容是从返回blob文件的调用中动态检索到的。
请求网址:https://wybory.gov.pl/sejmsenat2019/data/kk/sejm/1.blob
请求方法:GET
您可以流式传输它,或者实际上只是一grab而就,您将需要处理编码(使用python codecs UTF-8-sig可以做得不错);然后您还需要处理表格格式的重建。
因此,如果是小型项目,这里的硒可能是一个不错的选择。