【问题标题】:web scrape a progress bar in R网页在R中抓取进度条
【发布时间】:2021-10-16 10:34:29
【问题描述】:

我正在从以下网站https://indiainvestmentgrid.gov.in/opportunities/nip-project/606803 抓取不同的项目。此网页上有一个进度条,显示项目阶段(概念化 - 已完成)。你有什么建议我该如何刮这个?

我正在使用 RSelenium,提取页面源并通过以下方式查看:

remDr$navigate('https://indiainvestmentgrid.gov.in/opportunities/nip-project/606803')
url <- read_html(remDr$getPageSource()[[1]])

project_title <- url %>% 
    html_nodes(".prj-name") %>%
    html_text()

但是,我不确定如何抓取此进度条。选择器小工具显示已完成的圆圈/条被签名为“.active-stage”,但我在我的 HTML 代码中找不到它。在这个项目的情况下,它应该被刮为“正在实施”。

【问题讨论】:

    标签: r web-scraping rselenium


    【解决方案1】:

    您似乎同时使用了RSeleniumrvest。另外,请注意 html_nodes 已弃用。 条的颜色(我认为)由 projectStageID 定义。以下内容应该适用于大多数页面。

    library(rvest)
    library(magrittr
    
    url <- "https://indiainvestmentgrid.gov.in/opportunities/nip-project/606801"
    
    out <- read_html(url)
    
    out %>%
      html_elements(css = "#projectStageId") %>%
      as.character  %>%
      substr(start = 49, stop = nchar(.)-2) %>%
      switch(
        "500020" = "Under Conceptualization",
        "600037" = "Under Development",
        "500021" = "Under Implementation",
        "500023" = "Completed",
        NA
      )
    

    【讨论】:

    • 谢谢,它有效!虽然您能详细说明从 substr 开始的部分吗?我还没有完全理解它,将来可能对我很有用
    • 使用substr() 可以提取一段字符串,从该字符串中的某个位置开始和结束。我们只对告诉我们有用信息的字符串部分感兴趣,在这种情况下,它从第 49 个字母开始(包括空格)。 nchar(.)-2 位在这里不是必需的,但它更通用,以防您找到不同长度的 ID 字符串。 nchar() 中的 . 是一个占位符点 (magrittr.tidyverse.org/reference/pipe.html),基本上是在说“无论左侧是什么,我都想要这里)
    • out %&gt;% html_element("#projectStageId") %&gt;% html_attr("value") %&gt;% switch........
    猜你喜欢
    • 2011-08-15
    • 2014-12-28
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多