源文件上未显示超文本标记语言表格 [英] HTML table does not show on source file
本文介绍了源文件上未显示超文本标记语言表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用R(Packagervest
)抓取网页上的表格数据。为此,数据需要位于html源文件中(这显然是rvest
查找数据的地方),但在本例中并非如此。
但是,数据元素显示在检查面板的元素视图中:
源文件显示空表:
为什么数据显示在检查元素上而不显示在源文件上? 如何访问html格式的表格数据? 如果我无法通过html访问,我如何更改我的Web抓取策略?
源文件: view-source:https://si3.bcentral.cl/siete/secure/cuadros/cuadro_dinamico.aspx?idMenu=IPC_VAR_MEN1_HIST&codCuadro=IPC_VAR_MEN1_HIST编辑:推荐使用R的解决方案
推荐答案
我只希望‘专家’不要再说"您需要硒/无头铬"了,因为它几乎从来都不是真的,并且将不必要的、重量级的第三方依赖引入数据科学工作流中。
该站点是一个ASP.NET站点,因此它大量使用会话,而此特定站点背后的程序员强制该会话在家中启动("Hello,2000 Call,并希望恢复他们的会话状态保留模型。")
无论如何,我们需要从那里开始并继续到您的页面。以下是您的浏览器显示的内容:
我们还可以从👆🏽中看到,该站点返回可爱的JSON,所以我们最终会抓住它。让我们开始对Rhttr
工作流进行建模,如上面的会话:
library(xml2)
library(httr)
library(rvest)
从,嗯,开始!
httr::GET(
url = "https://si3.bcentral.cl/Siete/secure/cuadros/home.aspx",
httr::verbose()
) -> res
现在,我们需要从该页面获取HTML,因为我们需要将许多隐藏值提供给POST
,因为这是脑死亡的ASP.NET工作流工作方式的一部分(同样,请遵循上图中的请求):
pg <- httr::content(res)
hinput <- html_nodes(pg, "input")
hinput <- as.list(setNames(html_attr(hinput, "value"), html_attr(hinput, "name")))
hinput$`header$txtBoxBuscador` <- ""
hinput$`__EVENTARGUMENT` <- ""
hinput$`__EVENTTARGET` <- "lnkBut01"
httr::POST(
url = "https://si3.bcentral.cl/Siete/secure/cuadros/home.aspx",
httr::add_headers(
`Referer` = "https://si3.bcentral.cl/Siete/secure/cuadros/home.aspx"
),
encode = "form",
body = hinput
) -> res
现在我们已经做了我们需要做的事情,让网站以为我们已经有了一个适当的会话,所以让我们请求JSON内容:
httr::GET(
url = "https://si3.bcentral.cl/siete/secure/cuadros/actions.aspx",
httr::add_headers(
`X-Requested-With` = "XMLHttpRequest"
),
query = list(
Opcion = "1",
idMenu = "IPC_VAR_MEN1_HIST",
codCuadro = "IPC_VAR_MEN1_HIST",
DrDwnAnioDesde = "",
DrDwnAnioHasta = "",
DrDwnAnioDiario = "",
DropDownListFrequency = "",
DrDwnCalculo = "NONE"
)
) -> res
和,砰:
str(
httr::content(res), 1
)
## List of 32
## $ CodigoCuadro : chr "IPC_VAR_MEN1_HIST"
## $ Language : chr "es-CL"
## $ DescripcionCuadro : chr "IPC, IPCX, IPCX1 e IPC SAE, variación mensual, información histórica"
## $ AnioDesde : int 1928
## $ AnioHasta : int 2018
## $ FechaInicio : chr "01-01-2010"
## $ FechaFin : chr "01-11-2018"
## $ ListaFrecuencia :List of 1
## $ FrecuenciaDefecto : NULL
## $ DrDwnAnioDesde :List of 3
## $ DrDwnAnioHasta :List of 3
## $ DrDwnAnioDiario :List of 3
## $ hsDecimales :List of 1
## $ ListaCalculo :List of 1
## $ Metadatos : chr " <img runat="server" ID="imgButMetaDatos" alt="Ver metadatos" src="../../Images/lens.gif" OnClick="jav"| __truncated__
## $ NotasPrincipales : chr ""
## $ StatusTextBox : chr ""
## $ Grid :List of 4
## $ GridColumnNames :List of 113
## $ Paginador : int 15
## $ allowEmptyColumns : logi FALSE
## $ FechaInicioSelected: chr "2010"
## $ FechaFinSelected : chr "2018"
## $ FrecuenciaSelected : chr "MONTHLY"
## $ CalculoSelected : chr "NONE"
## $ AnioDiarioSelected : chr "2010"
## $ UrlFechaBase : chr "Indizar_fechaBase.aspx?codCuadro=IPC_VAR_MEN1_HIST"
## $ FechaBaseCuadro : chr "Ene 2010"
## $ IsBoletin : logi FALSE
## $ CheckSelected :List of 4
## $ lnkButFechaBase : logi FALSE
## $ ShowFechaBase : logi FALSE
在JSON中查找您需要的数据。我认为它在Grid…
元素中。
这篇关于源文件上未显示超文本标记语言表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文