如何用rvest从Flickr获取首张图片?解决代码返回NA问题
解决Flickr搜索页图片爬取返回NA的问题
问题根源
Flickr搜索结果的图片是动态加载的,read_html()只能抓取页面初始的静态HTML,此时目标元素还未被JavaScript渲染出来,所以无论用html_node还是html_element都找不到对应内容,返回NA。
解决方案:用RSelenium模拟浏览器渲染页面
RSelenium可以模拟真实浏览器加载页面,等待JS渲染完成后再抓取内容,具体步骤如下:
- 安装并加载所需包:
install.packages(c("RSelenium", "rvest", "dplyr")) library(RSelenium) library(rvest) library(dplyr)
- 启动Chrome浏览器驱动(需确保Chrome版本与驱动版本匹配):
driver <- rsDriver(browser = "chrome", port = 4567L) remote_driver <- driver[["client"]]
- 访问目标页面并等待渲染完成:
remote_driver$navigate("https://www.flickr.com/search/?text=cat") # 根据网络情况调整等待时间,确保页面加载完成 Sys.sleep(3)
- 获取渲染后的页面源码,提取第一张图片的地址:
page_source <- remote_driver$getPageSource()[[1]] image_src <- read_html(page_source) %>% html_element(".photo-list-photo-container img") %>% html_attr("src") print(image_src)
- 操作完成后关闭浏览器驱动:
remote_driver$close() driver$server$stop()
替代思路
如果不想用浏览器模拟工具,也可以尝试分析Flickr的后台API接口,直接请求接口获取图片数据,但需要处理接口的认证逻辑,相对复杂一些。
内容的提问来源于stack exchange,提问作者Gioi Hoc Sinh
相关产品推荐
相关产品推荐

