我想从某个网站上抓取pdf文件。我可以手动下载它们,但这是一个学习练习,以便以后可以做更多的站点。
我正在尝试使用rvest,但我的基本功能不可用。
library(tidyverse)
library(rvest)
trial <- 'http://www.fairlabor.org/report/2015-annual-public-report'
page2<- html(trial)
page2 %>% html_nodes("a") %>% html_attr("href") %>% str_subset(".pdf") %>% download.file("~/downloads/file.pdf")
我想对所有年度报告都这样做。所以我尝试了:
url <- 'http://www.fairlabor.org/impact/reports'
page<- html(url)
links_init <- page %>% html_nodes("a") %>% html_attr("href")
links <- links_init[seq(from = 53, to = 72, by = 2)]
new_urls <- paste0(url, links)
# trying to repeat the above basic example. If it succeeds, I can put in a for loop.
test <- html(new_urls[2])
test %>% html_nodes("a") %>% html_attr("href") %>% str_subset(".pdf")
相反,我得到的结果为空,因为它似乎在抓取其他页面。我不知道为什么会这样,因为page2
和test
似乎是相同的字符串。
任何人都知道这里发生了什么以及如何纠正它?
我尝试使用new_urls
明确将网址as.character(quote())
的向量转换为字符串。
答案 0 :(得分:1)
看一下基本URL,似乎有2003到2017年的报告。我们可以首先创建这些年份的urls
列表
urls <- paste0("http://www.fairlabor.org/report/",seq(2003, 2017),
"-annual-public-report")
urls
# [1] "http://www.fairlabor.org/report/2003-annual-public-report"
# [2] "http://www.fairlabor.org/report/2004-annual-public-report"
# [3] "http://www.fairlabor.org/report/2005-annual-public-report"
# [4] "http://www.fairlabor.org/report/2006-annual-public-report"
# [5] "http://www.fairlabor.org/report/2007-annual-public-report"
# [6] "http://www.fairlabor.org/report/2008-annual-public-report"
# [7] "http://www.fairlabor.org/report/2009-annual-public-report"
# [8] "http://www.fairlabor.org/report/2010-annual-public-report"
# [9] "http://www.fairlabor.org/report/2011-annual-public-report"
#[10] "http://www.fairlabor.org/report/2012-annual-public-report"
#[11] "http://www.fairlabor.org/report/2013-annual-public-report"
#[12] "http://www.fairlabor.org/report/2014-annual-public-report"
#[13] "http://www.fairlabor.org/report/2015-annual-public-report"
#[14] "http://www.fairlabor.org/report/2016-annual-public-report"
#[15] "http://www.fairlabor.org/report/2017-annual-public-report"
现在,不存在每个URL的报告,这可能会导致错误,因此我们可以使用tryCatch
跳过这些报告的下载。我们可以使用lapply
从所有urls
library(tidyverse)
library(rvest)
lapply(urls, function(x) tryCatch({ x %>%
read_html() %>%
html_nodes("a") %>%
html_attr("href") %>%
str_subset(".pdf") %>%
download.file(paste0("~/downloads/", basename(x), ".pdf"))},
error = function(e) { }))
这将在名为2003-annual-public-report.pdf
,2006-annual-public-report.pdf
等的下载文件夹中下载pdf报告。