2013-11-03 22 views
1

我想解析網站的內容,但收到錯誤消息。我不知道該如何處理錯誤:使用XML和RCurl解析R中的HTML

require(RCurl) 
require(XML) 
html <- getURL("http://www.sec.gov/Archives/edgar/data/8947/000119312506125763/0001193125-06-125763.txt") 
doc <- htmlParse(html, asText=TRUE) 

這是錯誤消息我得到:

錯誤:XML的內容似乎並不爲XML,也不來識別文件名

我的工作在Mac上:

> sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-apple-darwin10.8.0 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] plyr_1.8   rJava_0.9-4  R.utils_1.26.2 R.oo_1.13.9  R.methodsS3_1.4.4 gsubfn_0.6-5  proto_0.3-10  RCurl_1.95-4.1 
[9] bitops_1.0-6  splus2R_1.2-0  stringr_0.6.2  foreign_0.8-54 XML_3.95-0.2  

loaded via a namespace (and not attached): 
[1] tcltk_3.0.1 tools_3.0.1 

如何解決這個問題的任何想法?

+1

適用於 R版本2.15.2(2012-10-26) 平臺:x86_64-apple-darwin9.8.0/x86_64(64位) – colcarroll

回答

2

你不需要捲曲來獲取文件,內置的工具可以從網址讀取測試(例如,scanread.table)。

你得到這個錯誤的原因是該文件不是有效的XML或HTML。去掉<HTML>標籤前的所有行,你應該很好。

sec <- scan(file = "http://www.sec.gov/Archives/edgar/data/8947/000119312506125763/0001193125-06-125763.txt", what = "character", sep ="\n", allowEscapes = TRUE) 
sec <- sec[56:length(sec)] 
secHTML <- htmlParse(sec) 

還有其他的,不太難看的方式來獲取文件,但一旦你剝去「文」序言XML應該能夠解析它。

或者我覺得有一個參數htmlParse,它允許你指定一些行來跳過。

+0

謝謝。我稍微修改了你的解決方案:'sec < - scan(file =「http://www.sec.gov/Archives/edgar/data/8947/000119312506125763/0001193125-06-125763.txt」,what =「character 「),sep =」\ n「,allowEscapes = TRUE) sec < - sec [grep(」「,sec)[1]:length(sec)] secHTML < - htmlParse(sec)' – user1389960

+0

嘗試不要grep爲HTML標記。這個是非常無害的,但它會讓你陷入奇怪的麻煩之中。 –

2
> txt <- readLines(url("http://www.sec.gov/Archives/edgar/data/8947/000119312506125763/0001193125-06-125763.txt")) 
> head(txt) 
[1] "-----BEGIN PRIVACY-ENHANCED MESSAGE-----"       
[2] "Proc-Type: 2001,MIC-CLEAR"           
[3] "Originator-Name: [email protected]"       
[4] "Originator-Key-Asymmetric:"          
[5] " MFgwCgYEVQgBAQICAf8DSgAwRwJAW2sNKK9AVtBzYZmr6aGjlWyK3XmZv3dTINen" 
[6] " TWSM7vrzLADbmYQaionwg5sDW3P6oaM5D3tdezXMm7z1T+B+twIDAQAB"  

> length(txt) 
[1] 5517 
+0

謝謝迪文,這工作得很好! – user1389960

1

存儲在www.sec.gov網站上的文件是不同類型文件的混合文件。有的是純文本,有的是jpg,有的是gif,有的是pdf,有的是XML,有的是XBRL,有的是html等等。您使用的示例文件是「RAW分發」文件類型,實際上是任何或所有其他類型的組合。

文件名「0001193125-06-125763.txt」是「接收號碼」和txt擴展名的拼接。該RAW傳播文件由標題數據和一系列「<文檔> .... < /文檔>」標籤集組成。 「DOCUMENT」標籤的起始和結尾之間是「歸檔」中的各種「文件」。

申請中的每個不同文件應該分開處理。 PDFS,JPG,GIF文件類型是UUEncoded,應該是UUdecoded。其他像TXT,HTML,XML,XBRL應該被視爲純文本,並且如果需要的話,解析爲適當的類型。

標題數據標記了關於已提交申請的公司,人員,申報人,申報人代理等信息。