R:如何使用同一网址跨多个页面在网页上抓取表格

时间:2020-05-04 10:56:30

标签: xpath web-scraping

我想从以下网址网上抓取该表: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)

最感谢您的帮助-谢谢。

1 个答案:

答案 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中解析它们会更快。

输出: RScrape