我想知道是否存在一种使用read_html
(或rvest
)功能从R中的iShares网站自动提取Russell 3000资产的方法?
url:https://www.ishares.com/us/products/239714/ishares-russell-3000-etf
(表中所有资产的底部,而不仅仅是前10名)
到目前为止,我不得不将其复制并粘贴到Excel文档中,另存为CSV,然后使用read_csv
在R中创建代码,公司名称和部门的标题。
我曾经使用read_html
从Wikipedia中提取SP500的股份,但似乎无法弄清楚我需要投入多少以使R自动从iShares网站(以及其他我享有声誉的网站)中提取已发现所有〜3000个馆藏)。这是用于SP500的代码:
read_html("https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")%>%
html_node("table.wikitable")%>%
html_table()%>%
select('Symbol','Security','GICS Sector','GICS Sub Industry')%>%
as_tibble()
第一篇文章,抱歉,如果很难遵循...
任何帮助将不胜感激
迈克尔
答案 0 :(得分:0)
使用任何机器人,蜘蛛,智能代理,其他自动设备或手动过程来搜索,监视或复制本网站或由或生成的报告,数据,信息,内容,软件,产品服务或其他材料。未经贝莱德(BlackRock)许可,无论是通过链接还是通过其他方式(统称“材料”)从本网站获得,但前提是未经许可,可使用一般可用的第三方Web浏览器;
首先,您需要获取实际数据(而不是交互式javascript)。您对浏览器上的devloper功能有多熟悉?如果您浏览网站并跟踪流量,则会发现AJAX很大:
这是您需要的数据(全部)。找到此位置后,它只是清除数据。示例:
library(jsonlite)
#Locate the raw data by searching the Network traffic:
url="https://www.ishares.com/us/products/239714/ishares-russell-3000-etf/1467271812596.ajax?tab=all&fileType=json"
#pull the data in via fromJSON
x<-jsonlite::fromJSON(url,flatten=TRUE)
>Large list (10.4 Mb)
#use a comination of `lapply` and `rapply` to unlist, structuring the results as one large list
y<-lapply(rapply(x, enquote, how="unlist"), eval)
>Large list (50677 elements, 6.9Mb)
y1<-y[1:15]
> str(y1)
List of 15
$ aaData1 : chr "MSFT"
$ aaData2 : chr "MICROSOFT CORP"
$ aaData3 : chr "Equity"
$ aaData.display: chr "2.95"
$ aaData.raw : num 2.95
$ aaData.display: chr "109.41"
$ aaData.raw : num 109
$ aaData.display: chr "2,615,449.00"
$ aaData.raw : int 2615449
$ aaData.display: chr "$286,156,275.09"
$ aaData.raw : num 2.86e+08
$ aaData.display: chr "286,156,275.09"
$ aaData.raw : num 2.86e+08
$ aaData14 : chr "Information Technology"
$ aaData15 : chr "2588173"
**更新:如果您无法清除数据,请在这里
testdf<- data.frame(matrix(unlist(y), nrow=50677, byrow=T),stringsAsFactors=FALSE)
#Where we want to break the DF at (every nth row)
breaks <- 17
#number of rows in full DF
nbr.row <- nrow(testdf)
repeats<- rep(1:ceiling(nbr.row/breaks),each=breaks)[1:nbr.row]
#split DF from clean-up
newDF <- split(testdf,repeats)
结果:
> str(head(newDF))
List of 6
$ 1:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "MSFT" "MICROSOFT CORP" "Equity" "2.95" ...
$ 2:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "AAPL" "APPLE INC" "Equity" "2.89" ...
$ 3:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "AMZN" "AMAZON COM INC" "Equity" "2.34" ...
$ 4:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "BRKB" "BERKSHIRE HATHAWAY INC CLASS B" "Equity" "1.42" ...
$ 5:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "FB" "FACEBOOK CLASS A INC" "Equity" "1.35" ...
$ 6:'data.frame': 17 obs. of 1 variable:
..$ matrix.unlist.y...nrow...50677..byrow...T.: chr [1:17] "JNJ" "JOHNSON & JOHNSON" "Equity" "1.29" ...