为什么rvest看不到表格

时间:2019-09-23 11:28:42

标签: r rvest

我在尝试从某个页面抓取表格内容时遇到问题。这段代码显示了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)}),它不是我感兴趣的任何可见表。

所以问题是:如何在此页面上列出所有具有候选人名称/专业和从属关系的表,和/或如何刮除它们。

2 个答案:

答案 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文件的调用中动态检索到的。

enter image description here

  

请求网址:https://wybory.gov.pl/sejmsenat2019/data/kk/sejm/1.blob

     

请求方法:GET

您可以流式传输它,或者实际上只是一grab而就,您将需要处理编码(使用python codecs UTF-8-sig可以做得不错);然后您还需要处理表格格式的重建。

因此,如果是小型项目,这里的硒可能是一个不错的选择。