如何使用R(Rcurl / XML包)从Yahoo获取选项数据?

时间:2011-04-25 01:11:52

标签: xml r web-scraping finance

基本上,我想每天从Yahoo!抓取一些选项数据。金融。我一直在用(1)作为例子踢轮胎。但是由于我不熟悉HTML,所以它还没有完全解决。

(1)Scraping html tables into R data frames using the XML package

作为一个例子,我想抓取并收集以下选项链 http://finance.yahoo.com/q/op?s=MNTA&m=2011-05

这是我到目前为止所尝试的内容。最后两行不起作用,因为我不清楚我应该寻找什么类。任何帮助都会很棒。感谢。

library(RCurl)
library(XML)

theurl <- "http://finance.yahoo.com/q/op?s=MNTA&m=2011-05"
webpage <- getURL(theurl)
webpage <- readLines(tc <- textConnection(webpage)); close(tc)

pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE)

tablehead <- xpathSApply(pagetree, "//*/table[@class='yfnc_datamodoutline1']/tr/th", xmlValue)

results <- xpathSApply(pagetree, "//*/table[@class='wikitable sortable']/tr/td", xmlValue)

最后两行没有

1 个答案:

答案 0 :(得分:3)

我认为您希望获取两个表Call Options和Put Options中的信息。以下是使用XML

执行此操作的一种简单方法
url  = "http://finance.yahoo.com/q/op?s=MNTA&m=2011-05"
# extract all tables on the page
tabs = readHTMLTable(url, stringsAsFactors = F)

# locate tables containing call and put information
call_tab = tabs[[11]]
put_tab  = tabs[[15]]

我通过人工检查找出了两张桌子的位置。如果您要解析的页面的位置会发生变化,那么您可能需要使用表格长度或其他一些文本标准以编程方式定义位置。

EDIT。您可能对这两个表感兴趣的两个表都有cellpadding = 3。您可以使用此信息使用以下代码直接提取两个表

# parse url into html tree
doc = htmlTreeParse(url, useInternalNodes = T)

# find all table nodes with attribute cellpadding = 3
tab_nodes = xpathApply(doc, "//table[@cellpadding = '3']")

# parse the two nodes into tables
tabs = lapply(tab_nodes, readHTMLTable)
names(tabs) = c("calls", "puts")

这是一个包含两个表的列表。