0

Rcurl でデータを取得したいのですが、Web をダウンロードしたときに、必要なデータがファイルにありません。どうすれば取得できますか。

require(RCurl)
url="http://hk.ishares.com/product_info/fund/holdings/SEHK/2823.htm?ls=true&  l=en&periodCd=d"
data=getURL(url)
write(file="data.html",data)

Web で見られる次のデータが data.html にありません。どうすれば取得できますか?

% Net Assets    Name    Exchange Ticker     Trading Exchange    SEDOL   Market Price    
(HKD equivalent)    Shares Held     Market Value  
(HKD equivalent)    Sector   
9.17    PING AN INSURANCE (GROUP) CO. OF C  601318  XSHG    B1SVWB6     50.40       81,991,646  4,132,780,718   Financials  
6.25    CHINA MERCHANTS BANK CO. LTD A  600036  XSHG    6518723     12.41     227,242,375   2,819,477,954   Financials  
4.86    SHANGHAI PUDONG DEVELOPMENT BANK C  600000  XSHG    6182043     9.15    239,651,727     2,192,915,873   Financials
4

2 に答える 2

4

RCurl プルは基本的に、接続したものをダウンロードするだけです。そのため、出力は、そのページの基礎となる HTML が何であれ、そのままになります。私はここであなたを支援する上で言語的に不利な立場にあります (私は中国語を話したり読んだりしません) が、ページのソースを見ると、ほとんどすべてのデータが JavaScript を使用して呼び出されているように見えます。を実行すると、データではなく実際の JavaScript のコピーが作成されますgetURL()

最善の解決策は、HTML 自体をコピーするだけでなく、実際のデータを取得できる何らかの API があるかどうかを確認することです。彼らがそれを提供しているかどうかはわかりません。ただし、別の完全にもっともらしいオプションは、データをスプレッドシートとして取得することです。データを含む CSV ファイルを取得するためのリンクがページにあるようです。それをつかんで、readlines()または似たようなものを使用してデータに解析できます。私はときどき仕事のために CSV データを取得し、以下を使用してデータ フレームに取り込みます。

out <- postForm("https://the.api.com/api", token="abcd", format="csv")
mydf <- read.table(textConnection(out),header=TRUE,sep=",",quote="\"")
于 2012-09-25T17:01:37.700 に答える
2

そのページには、 http://hk.ishares.com/product_info/fund/excel_holdings.htm?ls=true&periodCd=d&%20%C3%82%C2%A0l=を指す「ダウンロード」リンクがあることに注意してください。 en&ticker=2823 .

それを使ってデータをダウンロードできますか?

私のパッケージには、米国の Web サイトから iShares ETF の保有株をダウンロードできるgetHoldings.iShares(これは によって呼び出されますgetHoldings)という関数があります。qmao

American iShares のウェブサイトでその正確な ETF を見つけることはできませんが、これはFTSE China 25 Index Fundの保有を取得します。おそらく、コードを見て、中国のサイトで使用できるように適応させることができます。

[警告: iShares.com は、私が追跡している他のどの ETF ウェブサイトよりも頻繁に ETF 保有スプレッドシートの形式を変更しているため、将来的に機能しなくなる可能性があります。]

最初にパッケージをインストールする必要がありますqmao

> library(qmao)
> getHoldings("FXI")
$iShares
[1] "FXI.h"

Warning message:
In FUN("FXI"[[1L]], ...) :
  FXI has some holdings with duplicate Symbols: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> head(FXI.h)
           FXI.Weight         ISIN        Sedol     Symbol
X..             10.33 HK0941009539 6073556      941       
X...1            9.20 CNE1000002H1 B0LMTQ3      939       
X99B1G1QD3       8.21 CNE1000003G1 B1G1QD8      1398      
X...2            7.00 HK0883013259 B00G0S5      883       
X...3            5.96 CNE1000001Z5 B154564      3988      
X...4            4.12 CNE100000Q43 B60LZR6      1288      
                                   Name Market.Value Market             Sector
X..                    CHINA MOBILE LTD    474724703   XHKG Telecommunications
X...1         CHINA CONSTRUCTION BANK-H    422947063   XHKG         Financials
X99B1G1QD3     IND & COMM BK OF CHINA-H    377377292   XHKG         Financials
X...2                         CNOOC LTD    321489999   XHKG          Oil & Gas
X...3               BANK OF CHINA LTD-H    273700485   XHKG         Financials
X...4      AGRICULTURAL BANK OF CHINA-H    189355603   XHKG         Financials
           Exchange.Rate Market.Price Shares.Held
X..                 7.75        11.09    42794500
X...1               7.75         0.68   619833320
X99B1G1QD3          7.75         0.59   642996995
X...2               7.75         2.02   159155000
X...3               7.75         0.38   724190000
X...4               7.75         0.39   486089000
于 2012-09-25T17:26:11.520 に答える