r - 用 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之类的吗?
任何帮助都非常受欢迎,我感谢整个社区。
解决方案
您需要致电:
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"
推荐阅读
- oracle - 授予对表的 SELECT 权限,而用户无需在 select 上限定所有者
- c# - 水下效果在 Unity 上无法运行,会是什么?
- node.js - MongoDB 对象的 View Count 不会增加
- smalltalk - 将 SmallInteger 子类化以表示数字事物?
- ruby-on-rails - 使用嵌入的 Rails 显示带有 ajax 的 html
- arrays - 如何使用 openpyxl 将复杂的 numpy 数组写入 excel
- python - 从不同结构的字典列表创建火花数据框
- ios - CFRunloopRun() 和简单的无限循环之间的区别?
- angularjs - 一个一个地执行解析器?
- indexing - Solr 前缀搜索与罗马数字 - 召回问题