使用R从网站抓取图片网址

时间:2018-07-10 14:03:47

标签: r web-scraping rvest

我正在尝试使用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

不知道我要去哪里。

2 个答案:

答案 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