首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Rvest抓取,POST请求

问使用Rvest抓取,POST请求
EN

Stack Overflow用户
提问于 2021-01-13 04:12:51
回答 1查看 79关注 0票数 0

我在Rvest中有一个请求有问题。

我从我的浏览器访问此链接,滚动时会出现元素:

https://www.disco.com.ar/Comprar/Home.aspx#_atCategory=false&_atGrilla=true&_id=446223

查看详细信息后,我发现了以下请求:

enter image description here

(link2 =“https://www.disco.com.ar/Comprar/HomeService.aspx/ObtenerArticulosPorDescripcionMarcaFamiliaLevex"”)

以前从来没有使用"POST“作为请求。我尝试了这些代码,但没有成功。

代码语言:javascript
复制
library(rvest)
library(httr)
library(jsonlite)


url_2<-"https://www.disco.com.ar/Comprar/HomeService.aspx/ObtenerArticulosPorDescripcionMarcaFamiliaLevex"

cuerpo <- list(
  
  IdMenu="446223",textoBusqueda="", producto="", marca="", pager="", ordenamiento=0, precioDesde="", precioHasta=""
)

page <- httr::POST(url_2,body=cuerpo,encode="form")

pagina <- content(page) %>% 
  html_attr("value")
代码语言:javascript
复制
r <- POST("https://www.disco.com.ar/Geolocalizacion/Geolocalizacion.aspx/GuardarLocalizacion", 
          content_type("application/json"),
          body = toJSON(
            list(
              latitud = NA,
              longitud = NA,
              noLocalizar = TRUE
            ), auto_unbox = TRUE
          ),encode = "json")

cookieList <- cookies(r) 
cookies <- cookieList$value %>% setNames(cookieList$name) 



url <- "https://www.disco.com.ar/Comprar/Home.aspx#_atCategory=false&_atGrilla=true&_id=446223"

main_page <- html_session(url,set_cookies(cookies))

如何访问以下数据(响应)(在上面的link2中)?

"{"d":"{"Tipo":[{"Filtro":"Importada","IdMenu":"0","Cantidad":"17"},{"Filtro":"Otros","IdMenu"...“

欢迎任何帮助。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-01-14 03:36:41

您打印的输出是一个json string。您可以使用jsonlite::fromJSON将其解析为列表/数据帧。结果将是一个列表,然后您可以在其中查找您正在搜索的数据。我将您的两个代码示例合并为一个更简单的代码。

代码语言:javascript
复制
library(httr)
library(rvest)
library(jsonlite)

r <- POST("https://www.disco.com.ar/Comprar/HomeService.aspx/ObtenerArticulosPorDescripcionMarcaFamiliaLevex", 
          content_type("application/json"),
          body = toJSON(list(IdMenu="446223",textoBusqueda="", producto="", marca="", pager="", ordenamiento=0, precioDesde="", precioHasta=""), 
                        auto_unbox = TRUE
          ), encode = "json")

data.json <- r %>% content() %>% nth(n=1) %>% fromJSON()

data.json是一个包含5个元素的列表。每个元素都是一个包含不同类型数据的数据帧。

例如,data.json$ResultadosBusquedaLevex返回一个数据帧,其中包含产品列表和一些详细信息(如价格)。

代码语言:javascript
复制
df.1 <- data.json$ResultadosBusquedaLevex
head(df.1)



  IdArticulo IdArchivoSmall IdArchivoBig                              DescripcionArticulo Precio PrecioAnterior precioUnidad_1 precioUnidad_0 Stock
1       4862     872107.jpg   872112.jpg                          Cerveza Heineken 473 Ml 110.33                            Lt         233.26    47
2       4867     893696.jpg   893701.jpg        Cerveza Rubia Quilmes Clásica 473 Ml Lata  72.10                            Lt         152.43    43
3       5239     893714.jpg   893719.jpg Cerveza Rubia Quilmes Clásica 6-Pack 473 Ml Lata 353.50                            Un          58.92    39
4      12710     872125.jpg   872130.jpg                          Cerveza Heineken 330 Ml  88.81                            Lt         269.12   458
5      84122     893776.jpg   893781.jpg           Cerveza Rubia Brahma Chopp 473 Ml Lata  79.27                            Lt         167.59    44
6     119170     893793.jpg   893798.jpg    Cerveza Rubia Brahma Chopp 6-Pack 473 Ml Lata 364.00                            Lt         769.56   443
  StockCD IdMenu Pesable CargarCaracteristicasDelProducto Grupo_Marca Grupo_Tipo Grupo_Precio Row Articulo_Oferta CucardaOferta CucardaOferta2
1       0      0   False                                     HEINEKEN      Otros            1   1               0                             
2       0      0   False                                      QUILMES      Otros            1   2               0                             
3       0      0   False                                      QUILMES      Otros            3   3               0                             
4       0      0   False                                     HEINEKEN      Otros            1   4               0                             
5       0      0   False                                       BRAHMA      Otros            1   5               0                             
6       0      0   False                                       BRAHMA      Otros            3   6               0                             
  CucardaOferta3 ArticuloEnCarrito ArticuloCantidadPedida Descuentos EsMacriProd SinInteres         Categoria UnidadMult MinCompra
1                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
2                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
3                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
4                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
5                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
6                                N                      0       NULL       FALSE            Bebidas->Cervezas          1         1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65691378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档