基于Div ID使用RStudio爬取政府网站数据的技术求助
爬取基于Div结构的政府网站数据
问题分析
你之前的代码使用了错误的选择器(.someTable、拼写错误的cotainer),这些元素在目标页面中并不存在。该页面采用带ID的Div而非Table组织数据,需要先定位到正确的Div容器,再提取内部数据。
正确步骤与代码
1. 定位数据容器
首先通过浏览器开发者工具(F12)查看页面结构,找到包含目标数据的父Div的ID或类名。从截图推测,数据大概率在某个特定ID的Div内(比如类似#divDashboard的元素)。
2. 提取数据的示例代码
library(rvest) library(dplyr) # 目标URL url <- "https://nreganarep.nic.in/netnrega/all_lvl_details_dashboard_new.aspx?Fin_Year=2023-2024&Digest=WJEEpOm1k0Ptz2KJJGSoqA" # 读取页面 page <- read_html(url) # 步骤1:定位到包含数据的父Div(替换成你实际找到的ID/类名) data_container <- page %>% html_element("#divData") # 示例ID,需根据实际页面调整 # 步骤2:提取所有数据行(假设每行是一个带特定类的Div,比如.row) data_rows <- data_container %>% html_elements(".row") # 需根据实际类名调整 # 步骤3:遍历行,提取每个字段(假设每个字段是.col类的Div) extracted_data <- lapply(data_rows, function(row) { fields <- row %>% html_elements(".col") %>% html_text(trim = TRUE) # 将字段转为数据框行,根据实际字段数量调整列名 data.frame( 区域 = fields[1], 已完成项目数 = fields[2], 总支出 = fields[3], stringsAsFactors = FALSE ) }) %>% bind_rows() # 查看结果 print(extracted_data)
注意事项
- 动态内容处理:如果
read_html无法获取数据,说明页面是JS动态加载的,此时需要使用RSelenium或rvest配合V8引擎渲染JS后再爬取。 - 选择器验证:务必用开发者工具确认选择器的正确性,避免拼写错误或指向不存在的元素。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

