源文件上未显示超文本标记语言表格 [英] HTML table does not show on source file

查看:0
本文介绍了源文件上未显示超文本标记语言表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用R(Packagervest)抓取网页上的表格数据。为此,数据需要位于html源文件中(这显然是rvest查找数据的地方),但在本例中并非如此。

但是,数据元素显示在检查面板的元素视图中:

源文件显示空表:

为什么数据显示在检查元素上而不显示在源文件上? 如何访问html格式的表格数据? 如果我无法通过html访问,我如何更改我的Web抓取策略?

*网页 https://si3.bcentral.cl/siete/secure/cuadros/cuadro_dinamico.aspx?idMenu=IPC_VAR_MEN1_HIST&codCuadro=IPC_VAR_MEN1_HIST

源文件: 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆