在R中使用RSelenium下载已提取网页图片的操作步骤咨询
RSelenium 图片资源提取下载操作步骤
依赖包未安装可先执行:
install.packages(c("urltools", "httr"))
你已获取的Images_Extract是RSelenium返回的WebElement列表,按以下步骤操作即可完成下载:
- 第一步:提取图片资源链接
遍历元素列表提取图片链接,常规图片取src属性,懒加载图片替换为data-src属性即可:# 提取常规图片链接 img_urls <- lapply(Images_Extract, function(item) item$getElementAttribute("src")[[1]]) # 懒加载图片用这行替换上一行: # img_urls <- lapply(Images_Extract, function(item) item$getElementAttribute("data-src")[[1]]) # 过滤无效空链接 img_urls <- Filter(function(x) !is.null(x) && nchar(x) > 0, img_urls) - 第二步:处理相对路径链接(无相对路径可跳过)
若提取到的是/xxx/xxx.jpg类的相对路径,需拼接当前页面域名转为可访问的绝对路径:library(urltools) # 获取当前页面根域名 current_url <- remDr$getCurrentUrl()[[1]] domain_part <- paste0(url_parse(current_url)$scheme, "://", url_parse(current_url)$domain) # 批量拼接为绝对路径 img_urls <- lapply(img_urls, function(x) { if (startsWith(x, "http")) return(x) return(paste0(domain_part, x)) }) - 第三步:批量下载图片到本地
两种下载方式可选,带请求头的方式适配多数有反爬限制的站点:# 创建本地存储文件夹 save_path <- "./download_images" dir.create(save_path, showWarnings = FALSE, recursive = TRUE) # 方式1:基础download.file下载,适配无反爬的公开站点 for (i in seq_along(img_urls)) { save_name <- file.path(save_path, paste0("img_", i, ".jpg")) tryCatch({ download.file(img_urls[[i]], destfile = save_name, mode = "wb") }, error = function(e) { message(paste0("第", i, "张图片下载失败: ", e$message)) }) } # 方式2:复用浏览器UA带请求头下载,适配有反爬限制的站点 library(httr) # 获取当前浏览器的User-Agent,避免被反爬识别 browser_ua <- remDr$executeScript("return navigator.userAgent;")[[1]] for (i in seq_along(img_urls)) { save_name <- file.path(save_path, paste0("img_", i, ".jpg")) tryCatch({ GET(img_urls[[i]], user_agent(browser_ua), write_disk(save_name, overwrite = TRUE)) }, error = function(e) { message(paste0("第", i, "张图片下载失败: ", e$message)) }) } - 特殊场景方案:图片链接加密无法直接访问时,可直接对元素截图保存
for (i in seq_along(Images_Extract)) { save_name <- file.path(save_path, paste0("img_screenshot_", i, ".png")) Images_Extract[[i]]$screenshot(file = save_name) }
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

