3

国が発行する地方債を調査するプロジェクトに取り組んでいますが、データの取得に問題があります。XML パッケージと以下のコードを使用して、その一部を取得できました。

> nys="http://newyork.municipalbonds.com/bonds/issue/649787N87"
> nys.table=readHTMLTable(nys,asText=TRUE,which=4)
> nys.table=as.data.frame(nys.table)
> head(nys.table)
  Trade Date Trade Time Maturity Date Coupon   Price Yield Trade Amount      Trade Type
1 2012-09-27     2:49pm      2013-Apr 5.000% 102.522 0.289     $270,000 Investor bought
2 2012-09-27     1:17pm      2013-Apr 5.000% 102.290 0.712      $45,000    Inter-dealer

しかし、そのサイトは無料で小さなサンプルしか提供していません. 公式サイトの EMMA には無料でデータがありますが、スクレイピングに苦労しています。前と同じアプローチを試みると、最終的には

nys="http://emma.msrb.org/SecurityView/SecurityDetailsTrades.aspx?cusip=649787N87"
nys.table=readHTMLTable(nys,asText=TRUE)
nys.table=as.data.frame(nys.table)
head(nys.table)

data frame with 0 columns and 0 rows

私が理解していることから、そしてこれについてかなり確信しているのは、Web ブラウザーを介してナビゲートすると、標準の T&C ページがあるということです。htmlParse(nys) を使用した後の出力は、データが実際に配置されているページではなく、T&C ページのページ ソース コードと同じです。そのため、コードが実行されると、T&C ページでテーブルを見つけようとします。

これはかなり一般的な問題だと思いましたが、これまでのところ、誰かが同様の問題を抱えている投稿を見つけることができませんでした. 誰かが私を正しい方向に向けることができれば、私は非常に感謝しています.

4

1 に答える 1

6

私はついにそれを働かせました。Firefox で Web 開発者を使用する必要がありました。これにより、サイトが免責事項の Cookie に設定している名前と値のペアを確認できました。ここにあります:

library(RCurl)
nys="http://emma.msrb.org/SecurityView/SecurityDetailsTrades.aspx?cusip=649787N87"
txt<-getURLContent(nys,cookie='Disclaimer=Ratings')
readHTMLTable(htmlParse(txt, asText = TRUE)) 

$ctl00_mainContentArea_tradeSearchResults
        Trade Date/Time   Settlement Date Price (%) Yield (%) Trade Amt ($) Trade Submission Type  
1   09/27/2012 : 02:49 PM      10/02/2012  102.5220     0.289       270,000       Customer bought  
2   09/27/2012 : 01:17 PM      10/02/2012    102.29     0.712        45,000    Inter-dealer Trade  
3   09/27/2012 : 01:17 PM      10/02/2012    102.29     0.712        45,000    Inter-dealer Trade  

次の 100 行を取得するには、現在の「viewstate」でフォームを投稿する必要があります。

# Get next set
viewstate=gsub('.*\"__VIEWSTATE\" value=\"([^\"]*)\".*','\\1',txt)

txt<-postForm(nys,
"__VIEWSTATE"=viewstate,
"__EVENTTARGET"="ctl00$mainContentArea$nextBottomButton",
.opts=list(cookie='Disclaimer=Ratings'))
readHTMLTable(htmlParse(txt, asText = TRUE)) 

$ctl00_mainContentArea_tradeSearchResults
        Trade Date/Time   Settlement Date Price (%) Yield (%) Trade Amt ($) Trade Submission Type  
1   06/27/2011 : 01:51 PM      06/30/2011  107.7350      0.65       600,000         Customer sold  
2   06/22/2011 : 12:05 PM      06/27/2011  107.1960     0.957         8,000       Customer bought  
3   06/22/2011 : 12:05 PM      06/27/2011  106.6960     1.226         8,000    Inter-dealer Trade  
于 2012-09-30T02:10:38.040 に答える