我想从以下网址网上抓取该表:https://www.eurofound.europa.eu/observatories/emcc/erm/factsheets
此url不变,但是表有多个页面。
我想在R中执行此操作,而不要使用html_sessions()(因为达到内存限制)。
我使用以下方法获得第一页:
library(magrittr)
library(rvest)
url <- "https://www.eurofound.europa.eu/observatories/emcc/erm/factsheets"
utils::download.file(url, destfile = "scrapedpage.html", quiet=TRUE)
input <- xml2::read_html("scrapedpage.html")
table <- input %>%
html_nodes("table") %>%
html_table(header=T)
最感谢您的帮助-谢谢。
答案 0 :(得分:2)
您有1838页可以获取。前十页的示例:
library(xml2)
library(RCurl)
library(dplyr)
library(rvest)
i=1
table = list()
for (i in 1:10) {
data=getURL(paste0("https://www.eurofound.europa.eu/observatories/emcc/erm/factsheets","?page=",i))
page <- read_html(data)
table1 <- page %>%
html_nodes(xpath = "(//table)[2]") %>%
html_table(header=T)
i=i+1
table1[[1]][[7]]=as.integer(gsub(",", "",table1[[1]][[7]]))
table=bind_rows(table, table1)
print(i)}
table$`Announcement date`=as.Date(table$`Announcement date`,format ="%d/%m/%Y")
注意:
i=1
:i是要递增的变量。
table = list()
:生成一个空列表(对于第一个“ bind_rows”步骤是必需的)。
1:10
:从第一页到第十页(应为1:1838)。
paste0
:每次生成一个新的URL。
//table[2]
:感兴趣的表。
as.integer(gsub)
:“ bind_rows”步骤必需。每个要绑定的列表的列必须是相同的类型。由于,
,第7列可以键入为字符。
print(i)
:被告知进度。
as.Date
:将第一列转换为正确类型的最后一步。
其他选项:您可以将循环外的所有页面下载到一个对象中,然后进行处理。也许使用DTA下载所有页面然后在R中解析它们会更快。