我正在尝试使用R中的“ rvest”从网页获取图像URL,但未成功。下面是代码:
library(rvest)
library(magrittr)
imageURL <- read_html("https://www.ajio.com/ajio-twill-snapback-cap/p/460022581_royalblue") %>%
html_nodes(css = "img") %>%
html_attr("src")
相同的代码适用于“ https://en.wikipedia.org/wiki/Lady_Jane_Grey”
不知道我要去哪里。
答案 0 :(得分:2)
正如Ista正确指出的那样,这是一个棘手的问题。但是,采用完整的JavaScript解决方案的一种替代方法是解析提供此类脚本的json。
通过对源html代码的简单搜索,您可以识别图像的url是否存储在以字符串“ window .__ PRELOADED_STATE__ =“ =”开头的节点内的json中。
library(tidyverse)
library(rvest)
library(jsonlite)
obj <- read_html("https://www.ajio.com/ajio-twill-snapback-cap/p/460022581_royalblue")
extracted_json <- obj %>%
html_nodes(xpath = '//script') %>%
.[10] %>% ## The relevant content is in the 10th script node
html_text(trim = TRUE) %>%
gsub('^window.__PRELOADED_STATE__ = |[;]$', '', .) ## clean the string to obtain a regular json structure.
object_json <- fromJSON(extracted_json,simplifyDataFrame = TRUE)
我们打印object_json并搜索.jpg字符串簇...
object_json
我们在地址“ $ product
$ productDetails
$ images”中找到了一个这样的群集,它恰好是一个数据框而不是一个简单的列表。
DF <- object_json$`product`$`productDetails`$images %>% as_data_frame()
unique(DF$url)
答案 1 :(得分:1)
在网络浏览器中打开https://www.ajio.com/ajio-twill-snapback-cap/p/460022581_royalblue,右键单击并选择“查看源代码”或类似内容。然后,在源中搜索img
。您找不到与您感兴趣的图像相对应的任何内容。为什么?因为该页面不包含图像;它包含可生成包含图像的页面的javascript。 rvest
软件包不会评估该javascript;它直接与您在浏览器中单击“查看源代码”按钮时看到的源代码一起使用。
最重要的是,使用rvest
将很难处理该页面。最好的选择也许是使用浏览器驱动程序,例如Rselenium
。