通过 R 从网站上嵌入的 table 抓取网页
Web scraping from table embedded on site through R
我目前正在使用其中一个网站 https://www.pmjdy.gov.in/Archive,首先我必须输入一个日期(必须是星期三),然后搜索结果会打开一个网页,其中存储有数据它带有 table 嵌入网页本身。我能以某种方式网络抓取整个数据并将其存储在 excel 文档中吗?我已经编写了以下代码,但是它出错了。我认为这可能是因为 this link 每当它打开时都需要人工输入从日历中输入任何星期三的日期来获取报告。我可以自动执行此过程吗?我只需在代码中输入日期,然后下载数据。会有很大的帮助。谢谢:)
library(RSelenium)
library(rvest)
library(tidyverse)
library(stringr)
library(purrr)
rD <- rsDriver(browser="firefox", port=4567L, verbose=F)
remDr <- rD[["client"]]
#go to the site
remDr$navigate("https://www.pmjdy.gov.in/Archive")
#get tables
tables <- remDr$findElements('class', 'table-container')
tableList <- list()
for(i in 1:length(tables)){
x <- tables[[i]]$getElementAttribute('innerHTML') %>%
unlist() %>%
read_html() %>%
html_table()
tableList[[i]] <- x[[1]]
}
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
无需人工干预,我们可以使用sendKeysToElement
输入日期。
#load packages
library(RSelenium)
library(rvest)
library(dplyr)
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
#navigate
url <- 'https://www.pmjdy.gov.in/Archive'
remDr$navigate(url)
#input date
date_element <- remDr$findElement(using = 'xpath', value = '//*[@id="ContentPlaceHolder1_txtdate"]')
date_element$sendKeysToElement(list('23/02/2022'))
#click get report
remDr$findElement(using = "xpath",'//*[@id="ContentPlaceHolder1_btngetreport"]')$clickElement()
#get the table
df = remDr$getPageSource()[[1]] %>%
read_html() %>% html_nodes(xpath = '//*[@id="ContentPlaceHolder1_tblHTMLReport"]/tbody') %>%
html_table()
从 df
中删除 NA
列
df1 = df[[1]]
colMeans(is.na(df1)) > .50
final <- df1[, colMeans(is.na(df1)) <= .15])
将数据导出到 excel 文件
library("writexl")
write_xlsx(final,"report.xlsx"
#you can also use xlsx package
我目前正在使用其中一个网站 https://www.pmjdy.gov.in/Archive,首先我必须输入一个日期(必须是星期三),然后搜索结果会打开一个网页,其中存储有数据它带有 table 嵌入网页本身。我能以某种方式网络抓取整个数据并将其存储在 excel 文档中吗?我已经编写了以下代码,但是它出错了。我认为这可能是因为 this link 每当它打开时都需要人工输入从日历中输入任何星期三的日期来获取报告。我可以自动执行此过程吗?我只需在代码中输入日期,然后下载数据。会有很大的帮助。谢谢:)
library(RSelenium)
library(rvest)
library(tidyverse)
library(stringr)
library(purrr)
rD <- rsDriver(browser="firefox", port=4567L, verbose=F)
remDr <- rD[["client"]]
#go to the site
remDr$navigate("https://www.pmjdy.gov.in/Archive")
#get tables
tables <- remDr$findElements('class', 'table-container')
tableList <- list()
for(i in 1:length(tables)){
x <- tables[[i]]$getElementAttribute('innerHTML') %>%
unlist() %>%
read_html() %>%
html_table()
tableList[[i]] <- x[[1]]
}
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
无需人工干预,我们可以使用sendKeysToElement
输入日期。
#load packages
library(RSelenium)
library(rvest)
library(dplyr)
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
#navigate
url <- 'https://www.pmjdy.gov.in/Archive'
remDr$navigate(url)
#input date
date_element <- remDr$findElement(using = 'xpath', value = '//*[@id="ContentPlaceHolder1_txtdate"]')
date_element$sendKeysToElement(list('23/02/2022'))
#click get report
remDr$findElement(using = "xpath",'//*[@id="ContentPlaceHolder1_btngetreport"]')$clickElement()
#get the table
df = remDr$getPageSource()[[1]] %>%
read_html() %>% html_nodes(xpath = '//*[@id="ContentPlaceHolder1_tblHTMLReport"]/tbody') %>%
html_table()
从 df
NA
列
df1 = df[[1]]
colMeans(is.na(df1)) > .50
final <- df1[, colMeans(is.na(df1)) <= .15])
将数据导出到 excel 文件
library("writexl")
write_xlsx(final,"report.xlsx"
#you can also use xlsx package