我想提取链接并为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)
答案 0 :(得分:4)
我假设此网站可以正常运行,您可以通过它自动进行爬网,如果不确定,请检查其robots.txt和该网站的爬网政策。
您实际上还有很多工作要做。
此脚本应帮助您从单个页面中提取所需的报告。如果您想制作一个脚本来从所有页面中提取脚本,建议您阅读有关网络抓取的教程,例如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.file
与GET
一起使用即可下载文件。