首页 > 解决方案 > 用 rvest 抓取网站询问地理位置

问题描述

我开始从阿根廷抓取一些网站。我想抓取这个特定的网站:“https://www.disco.com.ar/prod/88953/aderezo-mayonesa-natura-237-gr”或“https://www.disco.com.ar/prod /416680/cerveza-rubia-brahma-chopp-1-l-botella-retornable"

我使用包“rvest”来复制其他网站的价格和名称。我正在尝试使用以下代码获取 URL:

 library (rvest)
    url_1 <- "https://www.disco.com.ar/prod/88953/aderezo-mayonesa-natura-237-gr"
    page <- read_html (url_1)

我想用这些特定产品的价格和名称来刮擦整个页面。我的问题是 rvest 仅在有人单击 chrome 中出现的位置问题之前使用第一个窗口。一旦你点击“允许”或“不允许”,chrome 让我访问所有的 html 信息。我附上了参考照片,我想访问产品,我只能访问带有徽标的第一个窗口。

如何通过 get_html 访问信息?我必须用beautifulsoup之类的吗?

任何帮助都非常受欢迎,我感谢整个社区。

标签: rweb-scraping

解决方案


您需要致电:

POST /Geolocalizacion/Geolocalizacion.aspx/GuardarLocalizacion 

并将 cookie 保存到您的html_session. 产品信息位于 JSON 格式的input标签中,其名称hfProductData位于value属性下:

library(rvest)
library(httr)
library(jsonlite)

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/prod/88953/aderezo-mayonesa-natura-237-gr"

resp <- html_session(url, set_cookies(cookies)) %>% 
    html_nodes('input[name="hfProductData"]') %>%
    html_attr("value")

print(fromJSON(resp))

输出 :

$DescripcionArticulo
[1] "Aderezo Mayonesa Natura 237 Gr"
$Grupo_Marca
[1] "NATURA"
$IdArchivoZoom
[1] ""
$IdArchivoBig
[1] "444812.jpg"
$IdArchivoSmall
[1] "444664.jpg"
$IdArticulo
[1] 88953
$Precio
[1] "49.52"
$unidadPedida
[1] "Un"
$Pesable
[1] "False"
$Stock
[1] "84.00"
$CucardaOferta
[1] ""
$Descuentos
list()
$ImgMxM
[1] "11510117005.jpg"
$Codigo
[1] "11510117005"
$Categoria
[1] "Almacén->Aderezos->Mayonesas"

推荐阅读