无法使用 R 和 R 包 RCurl 和 RHTMLForms 验证 HTML 表单
Can't validate HTML forms using R and R packages RCurl and RHTMLForms
我正在尝试使用 R 从这个巴西网站提取 energy/water 数据:http://www.ons.org.br/historico/energia_natural_afluente.aspx
没关系尝试访问网站的英文版,因为这个 link 在英文版中不存在...
可以清楚地看到,selection有html种形式:"Região ou Bacia"(地区或盆地),"Unidade de medida"(计量单位)和"Período"。我不需要的最后一个表格。
此外,您必须 select 按从上到下的顺序填写表格,例如,在 select 一个区域或盆地之后,您只能 select 测量单位。
在您 select 编辑表格并按咨询后,应该会出现一个带有 table 和图表的网页。我只想提取 table。显示的网页的 link 是 http://www.ons.org.br/historico/energia_natural_afluente_out.aspx 因此您必须验证这些表格才能访问该网页。
起初我尝试使用 XML 包和 RHTMLForms(可在 omegahat 获得),但没有成功,如下所示。
library(XML)
library(RCurl)
library(RHTMLForms)
x <- getHTMLFormDescription("http://www.ons.org.br/historico/energia_natural_afluente.aspx",
encoding = "utf-8")
检查 x 的内容我发现我感兴趣的形式位于 x[[4]]:
> x[[4]]
HTML Form: http://www.ons.org.br/historico/energia_natural_afluente_out.aspx
passo1: [ -1 ] -1, SE, S, NE, N, Grande, Paranaiba, Tiete, Paranapanema, Parana, Iguacu, Uruguai, Jacui, Capivari, Paraguai, Paraiba_do_sul, Doce, Itabapoana, São_francisco, Parnaiba, Tocantins, Amazonas, Selecione, Paranaíba, Tietê, Paraná, Iguaçu, Paraguai (a partir de 2001), Paraíba do Sul, Itabapoana (a partir de 2001), São Francisco, Parnaíba, Amazonas (a partir de 2001)
passo2a: [ -1 ] -1, Selecione
passo2b: [ -1 ] -1, MWmed, MLT, Selecione, %MLT
passo3a: [ -1 ] -1, Selecione
passo3b: [ -1 ] -1, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, Selecione
comparar: 1
passo4a: [ -1 ] -1, Selecione
passo4b: [ -1 ] -1, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, Selecione
使用 RHTMLForms 中的 createFunction:
fun1 <- createFunction(x[[4]])
然后我尝试将所有参数传递给函数:
X <- fun1(passo1 = "SE", passo2a = "-1", passo2b = "MWmed", passo3a = "-1", passo3b = "2014", comparar = "", passo4a = "-1", passo4b = "2009")
但是检查对象 X 我没有按预期获得带有 table 和图表的网页。我也尝试更改一些参数,但也没有用。
我还尝试使用 RCurl 包中的 getForm 和 postForm:
test <- getForm("http://www.ons.org.br/historico/energia_natural_afluente.aspx", .params = list(passo1 = "NE", passo2b = "MWmed", passo3b = 2014))
teste2 <- postForm("http://www.ons.org.br/historico/energia_natural_afluente.aspx",.params = list(passo1 = "SE", passo2a = -1, passo2b = "MWmed", passo3a = -1, passo3b = 2014, comparar = 1, passo4a = -1, passo4b = 2009))
但不幸的是,这也没有奏效。检查 html 中的代码 我认为 post 更正确,尽管我不太擅长 html...
有人可以帮我抓取网页吗?
如果您可以查看 select 弹出菜单中的值(使用 Chrome/Safari/Firefox 开发人员工具),您只需发出 POST
请求即可获取这些值:
library(xml2)
library(httr)
library(rvest)
req <- POST(verb = "POST",
url = "http://www.ons.org.br/historico/energia_natural_afluente_out.aspx",
body = list(passo1 = "Jacui",
passo2a = "-1",
passo2b = "MLT",
passo3a = "-1",
passo3b = "2008",
tipo = "bacia",
passo2 = "MLT",
passo3 = "2008",
passo4 = "-1",
passo1text = "Jacui",
passo2text = "%MLT",
passo3text = "2008",
passo4text = "-1"),
encode = "form")
content(req, as="text") %>%
read_html() %>%
html_nodes("table.tabelaHistorico") %>%
html_table()
## [[1]]
## X1 X2
## 1 2008
## 2 Jan 69,43
## 3 Fev 37,45
## 4 Mar 43,79
## 5 Abr 40,78
## 6 Mai 47,73
## 7 Jun 76,79
## 8 Jul 52,65
## 9 Ago 77,64
## 10 Set 54,15
## 11 Out 170,89
## 12 Nov 186,74
## 13 Dez 78,41
我正在尝试使用 R 从这个巴西网站提取 energy/water 数据:http://www.ons.org.br/historico/energia_natural_afluente.aspx
没关系尝试访问网站的英文版,因为这个 link 在英文版中不存在...
可以清楚地看到,selection有html种形式:"Região ou Bacia"(地区或盆地),"Unidade de medida"(计量单位)和"Período"。我不需要的最后一个表格。
此外,您必须 select 按从上到下的顺序填写表格,例如,在 select 一个区域或盆地之后,您只能 select 测量单位。
在您 select 编辑表格并按咨询后,应该会出现一个带有 table 和图表的网页。我只想提取 table。显示的网页的 link 是 http://www.ons.org.br/historico/energia_natural_afluente_out.aspx 因此您必须验证这些表格才能访问该网页。
起初我尝试使用 XML 包和 RHTMLForms(可在 omegahat 获得),但没有成功,如下所示。
library(XML)
library(RCurl)
library(RHTMLForms)
x <- getHTMLFormDescription("http://www.ons.org.br/historico/energia_natural_afluente.aspx",
encoding = "utf-8")
检查 x 的内容我发现我感兴趣的形式位于 x[[4]]:
> x[[4]]
HTML Form: http://www.ons.org.br/historico/energia_natural_afluente_out.aspx
passo1: [ -1 ] -1, SE, S, NE, N, Grande, Paranaiba, Tiete, Paranapanema, Parana, Iguacu, Uruguai, Jacui, Capivari, Paraguai, Paraiba_do_sul, Doce, Itabapoana, São_francisco, Parnaiba, Tocantins, Amazonas, Selecione, Paranaíba, Tietê, Paraná, Iguaçu, Paraguai (a partir de 2001), Paraíba do Sul, Itabapoana (a partir de 2001), São Francisco, Parnaíba, Amazonas (a partir de 2001)
passo2a: [ -1 ] -1, Selecione
passo2b: [ -1 ] -1, MWmed, MLT, Selecione, %MLT
passo3a: [ -1 ] -1, Selecione
passo3b: [ -1 ] -1, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, Selecione
comparar: 1
passo4a: [ -1 ] -1, Selecione
passo4b: [ -1 ] -1, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, Selecione
使用 RHTMLForms 中的 createFunction:
fun1 <- createFunction(x[[4]])
然后我尝试将所有参数传递给函数:
X <- fun1(passo1 = "SE", passo2a = "-1", passo2b = "MWmed", passo3a = "-1", passo3b = "2014", comparar = "", passo4a = "-1", passo4b = "2009")
但是检查对象 X 我没有按预期获得带有 table 和图表的网页。我也尝试更改一些参数,但也没有用。
我还尝试使用 RCurl 包中的 getForm 和 postForm:
test <- getForm("http://www.ons.org.br/historico/energia_natural_afluente.aspx", .params = list(passo1 = "NE", passo2b = "MWmed", passo3b = 2014))
teste2 <- postForm("http://www.ons.org.br/historico/energia_natural_afluente.aspx",.params = list(passo1 = "SE", passo2a = -1, passo2b = "MWmed", passo3a = -1, passo3b = 2014, comparar = 1, passo4a = -1, passo4b = 2009))
但不幸的是,这也没有奏效。检查 html 中的代码 我认为 post 更正确,尽管我不太擅长 html...
有人可以帮我抓取网页吗?
如果您可以查看 select 弹出菜单中的值(使用 Chrome/Safari/Firefox 开发人员工具),您只需发出 POST
请求即可获取这些值:
library(xml2)
library(httr)
library(rvest)
req <- POST(verb = "POST",
url = "http://www.ons.org.br/historico/energia_natural_afluente_out.aspx",
body = list(passo1 = "Jacui",
passo2a = "-1",
passo2b = "MLT",
passo3a = "-1",
passo3b = "2008",
tipo = "bacia",
passo2 = "MLT",
passo3 = "2008",
passo4 = "-1",
passo1text = "Jacui",
passo2text = "%MLT",
passo3text = "2008",
passo4text = "-1"),
encode = "form")
content(req, as="text") %>%
read_html() %>%
html_nodes("table.tabelaHistorico") %>%
html_table()
## [[1]]
## X1 X2
## 1 2008
## 2 Jan 69,43
## 3 Fev 37,45
## 4 Mar 43,79
## 5 Abr 40,78
## 6 Mai 47,73
## 7 Jun 76,79
## 8 Jul 52,65
## 9 Ago 77,64
## 10 Set 54,15
## 11 Out 170,89
## 12 Nov 186,74
## 13 Dez 78,41