编写一个循环来通过一列网址读取html

问题描述 投票:0回答:1

我正在使用rvest从美国证券交易委员会获取一些公司文件。从特定公司开始,我成功地将URL提取到每个10k文档中,并将这些URL放在名为xcel的数据框中。然后,我想进一步抓取每个URL。

我认为最有意义的是使用for循环遍历xcel$fullurl列中的每个URL,在每个URL上使用read_html函数,并在每个页面上提取表格)。

我无法让实际的循环工作。如果您认为for循环不是可行的方法,我很乐意听到任何其他建议。

library(rvest)
library(stringi)

sec<-read_html("https://www.sec.gov/cgi-bin/browse-edgar? 
action=getcompany&CIK=0000072903&type=10-k&dateb=&owner=exclude&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")

希望这应该给我每个网站的随后表格

r rvest
1个回答
0
投票

您可以使用map / lapply遍历每个URL并从每个URL中提取第一个表

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

© www.soinside.com 2019 - 2024. All rights reserved.