#r #rvest
#r #rvest
Вопрос:
Я использую rvest
для очистки некоторых корпоративных документов от Комиссии по ценным бумагам и биржам США. Начиная с конкретной компании, я успешно извлек URL-адреса для каждого из их 10 тыс. документов и поместил эти URL-адреса во фрейм данных с именем xcel. Затем я хотел бы дополнительно очистить каждый из этих URL-адресов.
Я думаю, что наиболее разумно использовать цикл for для просмотра каждого URL-адреса в xcel$fullurl
столбце, использования read_html
функции для каждого из них и извлечения таблицы на каждой странице).
У меня возникли проблемы с получением фактического цикла for для работы. Если вы считаете, что цикл for — это не правильный путь, я хотел бы услышать любые другие советы.
library(rvest)
library(stringi)
sec<-read_html("https://www.sec.gov/cgi-bin/browse-edgar?
action=getcompanyamp;CIK=0000072903amp;type=10-kamp;dateb=amp;owner=excludeamp;count=40")
xcel<- sec %>%
html_nodes("#documentsbutton") %>%
html_attr("href")
xcel<-data.frame(xcel)
xcel$xcell<-paste0("https://www.sec.gov",xcel$xcell)
xcel$fullurl<-paste0(xcel$xcell,xcel$xcel)
as.character(xcel$fullurl) #set of URL's that I want to scrape from
#Problem starts here
for (i in xcel$fullurl){
pageurl<-xcel$fullurl
phase2 <- read_html(pageurl[i])
hopefully<-phase2 %>%
html_table("tbody")
надеюсь, это должно дать мне следующую таблицу с каждого из
сайтов
Ответ №1:
Вы можете перебирать каждый URL-адрес, используя map
/ lapply
, и извлекать 1-ю таблицу из каждого
library(rvest)
library(dplyr)
library(purrr)
map(xcel$fullurl, ~ .x %>% read_html() %>% html_table() %>% .[[1]])
# Seq Description Document Type Size
#1 1 10-K xcel1231201510-k.htm 10-K 6375358
#2 2 EXHIBIT 10.28 xcelex1028q42015.htm EX-10.28 57583
#3 3 EXHIBIT 10.29 xcelex1029q42015.htm EX-10.29 25233
#4 4 EXHIBIT 12.01 xcelex1201q42015.htm EX-12.01 50108
#5 5 EXHIBIT 21.01 xcelex2101q42015.htm EX-21.01 22841
#.....
Это вернет список фреймов данных. Если вы хотите объединить их все в один фрейм данных, вы могли бы использовать map_dfr
вместо map
.
Комментарии:
1. Спасибо! Это решение сработало отлично, и после более подробного ознакомления с функцией Map я думаю, что смогу использовать его и для дальнейшей работы здесь.