【发布时间】:2023-06-16 19:27:02
【问题描述】:
我正在尝试使用 R 从这个巴西网站提取能源/水数据:http://www.ons.org.br/historico/energia_natural_afluente.aspx
没关系尝试访问该网站的英文版,因为该链接在英文版中不存在...
很明显,有html表格可供选择:“Região ou Bacia”(地区或盆地)、“Unidade de medida”(计量单位)和“Período”。我不需要的最后一个表单。
此外,您必须从上到下依次选择表格,例如您只能在选择区域或盆地后选择测量单位。
在您选择表格并按顾问后,应该会出现一个带有表格和图表的网页。我有兴趣只提取表格。出现的网页链接是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 我没有得到预期的带有表格和图表的网页。我也尝试更改一些参数,但也没有用。
我还尝试使用 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 代码更正确,虽然我不太擅长 html...
有人可以帮我抓取网页吗?
【问题讨论】:
标签: html r forms web-scraping rcurl