使用rvest网页爬取时如何避免出现character(0)
问题原因与解决方案
核心问题
你用rvest直接爬Kaggle数据集页面失败,是因为:
- Kaggle的数据集页面是动态渲染的,
read_html只能抓取初始静态HTML,你用SelectorGadget定位的.hdFafr元素是JavaScript加载后才生成的,静态源码里根本没有,所以返回character(0)。 - 更重要的是,这个页面是数据集的下载入口,实际品种数据是封装在CSV文件里的,没必要爬网页,直接读取数据文件效率更高。
推荐方案:直接读取数据集文件
- 去该数据集页面下载CSV文件(比如
leafly-cannabis-strains.csv)。 - 用R读取文件并提取品种名称:
library(readr) # 替换成你本地的文件路径 weed_data <- read_csv("leafly-cannabis-strains.csv") # 提取品种列(列名以实际CSV为准,比如可能叫Strain) strain_name <- weed_data$Strain head(strain_name)
备选方案:爬动态页面(不推荐)
如果一定要爬网页,需要用能处理JavaScript的工具(比如RSelenium)模拟浏览器加载页面:
library(RSelenium) library(rvest) # 启动Chrome驱动(需提前安装Chrome和对应版本的chromedriver) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www.kaggle.com/datasets/corykjar/leafly-cannabis-strains-dataset?resource=download") # 等待页面加载完成 Sys.sleep(5) # 获取加载后的页面源码 page_source <- remDr$getPageSource()[[1]] weed_data <- read_html(page_source) # 提取品种名称(注意:Kaggle页面结构可能随时变化,需重新确认选择器) strain_name <- weed_data %>% html_nodes(".hdFafr div:nth-child(2)") %>% html_text() print(strain_name) # 关闭浏览器和驱动 remDr$close() driver$server$stop()
内容的提问来源于stack exchange,提问作者Jesus Zarate
相关产品推荐
相关产品推荐

