如何提取下载链接并在R中下载文件?

时间:2019-06-22 01:28:05

标签: r rvest

我想提取链接并为Type ='AA'的第一条记录自动下载文件。

我设法提取了表格,但是如何提取最后一列中“ AA”类型的链接?


library(rvest)
library(stringr)

url <- "https://beta.companieshouse.gov.uk/company/02280000/filing-history"
wahis.session <- html_session(url)                                
r <-    wahis.session %>%
  html_nodes(xpath = '//*[@id="fhTable"]') %>%
  html_table(fill = T) 

2 个答案:

答案 0 :(得分:4)

我假设此网站可以正常运行,您可以通过它自动进行爬网,如果不确定,请检查其robots.txt和该网站的爬网政策。

您实际上还有很多工作要做。

  1. 如何仅提取特定节点而不是全部节点。
  2. 如何提取链接而不是重叠文本字符串。
  3. 如何一次下载多个文件并命名。
  4. 如何移至下一页并重复该过程。

此脚本应帮助您从单个页面中提取所需的报告。如果您想制作一个脚本来从所有页面中提取脚本,建议您阅读有关网络抓取的教程,例如https://www.datacamp.com/community/tutorials/r-web-scraping-rvest

您可以检出的另一个软件包是Rcrawler,它将使脚本的很多提取部分自动化,但是需要您学习其功能。

library(rvest)
library(stringr)

url <- "https://beta.companieshouse.gov.uk/company/02280000/filing-history"
url2 <- "https://beta.companieshouse.gov.uk"

wahis.session <- html_session(url)                                
r <-    wahis.session %>%
  html_nodes(xpath = '//*[@id="fhTable"]') %>%
  html_table(fill = T)

s <- wahis.session %>% 
  html_nodes(xpath = '//*[contains(concat( " ", @class, " " ), concat( " ",     "download", " " ))]') %>% 
  html_attr("href")

r <- r[[1]] %>% as_tibble %>% 
  mutate(link = paste0(url2, s)) %>% 
  filter(Type == "AA")

n <- paste0("report",seq_along(r$link), ".pdf")

for(i in seq_along(n)) {
  download.file(r$link[i], n[i], mode = "wb")
}

答案 1 :(得分:0)

我将提取tr个节点,使用purrr的map生成.filing-type的文本和.download的{​​{1}}属性的数据帧,将数据帧与dplyr的href,最后根据bind_rows进行过滤:

type == "AA"

这将返回“ AA”类型文档的路径数据框:

library(dplyr)
library(rvest)
library(purrr)

url <- "https://beta.companieshouse.gov.uk/company/02280000/filing-history"

html <- read_html(url)

html %>%
    html_nodes("tr") %>% 
    map(~ tibble(type = html_text(html_node(., ".filing-type"), T),
                 href = html_attr(html_node(., ".download"), "href")
                 )) %>% 
    bind_rows() %>% 
    filter(type == "AA")

现在,您只需要将域和路径粘贴在一起,然后将基R的 type href <chr> <chr> 1 AA /company/02280000/filing-history/MzIxMjY0MDgxOGFkaXF6a2N4/document?format=pdf&download=0 2 AA /company/02280000/filing-history/MzE4NDAwMDg1NGFkaXF6a2N4/document?format=pdf&download=0 或RVest的download.fileGET一起使用即可下载文件。