如何使用R中RSelenium爬取印度投资网格网站项目进度条阶段信息
问题原因
你无法在源码中找到.active-stage类,是因为调用getPageSource时页面的JavaScript还未完成进度条组件的渲染,对应类名还没有被添加到DOM节点上。
解决步骤
第一步:添加页面加载等待
导航到页面后先等待组件渲染完成,不要立刻抓取源码:
# 导航到目标页面 remDr$navigate('https://indiainvestmentgrid.gov.in/opportunities/nip-project/606803') # 设置页面加载超时时间为10秒 remDr$setTimeout(type = "page load", milliseconds = 10000) # 显式等待进度条容器加载完成,避免提前抓取失效 remDr$waitFor(selector = ".project-timeline", timeout = 10000) # 若网络波动大可额外加1-2秒强制等待 # Sys.sleep(2)
第二步:抓取当前阶段信息
方法1:直接通过RSelenium获取(更稳定)
直接在浏览器渲染完成的DOM中定位元素,不需要转静态源码解析:
active_stage_elem <- remDr$findElement(using = "css selector", value = ".active-stage") # trimws用于去除首尾空白字符 current_stage <- trimws(active_stage_elem$getElementText()[[1]]) print(current_stage) # 输出为:Under Implementation,对应中文含义为“正在实施中”
方法2:渲染完成后用rvest解析
等所有JS执行完成后再抓取页面源码,就可以找到.active-stage类了:
# 抓取渲染完成后的完整页面源码 page_source <- remDr$getPageSource()[[1]] parsed_page <- read_html(page_source) current_stage <- parsed_page %>% html_element(".active-stage") %>% html_text(trim = TRUE)
内容的提问来源于stack exchange,提问作者nautim
相关产品推荐
相关产品推荐

