如何使用RSelenium配合rvest爬取切换为印度卢比后的项目成本数据
爬取印度卢比计价项目成本的实现方案
首先纠正个拼写小问题:印度卢比的标准货币代码是INR,不是你提到的IND。
你提到的RSelenium完全可以实现需求,另外还有更轻量的无浏览器方案可选,两种方案如下:
方案1:RSelenium模拟货币切换(符合你的需求)
思路是通过RSelenium启动浏览器,模拟点击右上角货币切换按钮选择INR,待页面数值刷新后再提取成本数据,示例代码如下:
library(RSelenium) library(rvest) # 启动Chrome驱动,注意chromever参数要和你本地安装的Chrome浏览器版本一致 driver <- rsDriver(browser = "chrome", chromever = "对应你的Chrome版本号") remDr <- driver$client # 访问目标项目页面 remDr$navigate("https://indiainvestmentgrid.gov.in/opportunities/project/21117") Sys.sleep(3) # 等待页面初始加载完成 # 点击货币选择下拉框,选择器可通过F12元素检查器获取,以下为示例 currency_dropdown <- remDr$findElement(using = "css", value = ".top-bar .currency-select") currency_dropdown$clickElement() Sys.sleep(1) # 选择印度卢比选项 inr_option <- remDr$findElement(using = "xpath", value = "//li[text()='INR']") inr_option$clickElement() Sys.sleep(2) # 等待成本数值刷新完成 # 提取刷新后的卢比计价成本 page_html <- read_html(remDr$getPageSource()[[1]]) project_total_cost_inr <- page_html %>% html_nodes(".total-cost-value") %>% html_text() print(project_total_cost_inr) # 运行结束后关闭驱动,释放资源 remDr$close() driver$server$stop()
注意事项:
- 代码里的CSS选择器、XPath需要根据页面实际元素结构调整,打开浏览器F12选中对应按钮即可复制到正确的选择器
- 可以把固定等待的
Sys.sleep替换为显式等待,比如调用remDr$waitFor()方法等待元素可点击后再操作,提升代码稳定性 - 如果启动驱动报错,先确认你安装的ChromeDriver版本和本地Chrome浏览器版本完全匹配
方案2:直接调用API接口(更轻量高效)
这个网站的项目数据本身就是以INR为单位存储在后端的,前端切换货币只是做了汇率换算渲染。你可以直接在浏览器F12的网络面板里找到项目详情的API请求,直接请求该接口解析JSON即可拿到原始INR成本,不需要启动浏览器,运行速度远快于RSelenium方案。
内容的提问来源于stack exchange,提问作者nautim
相关产品推荐
相关产品推荐

