从html源读取XML数据到R中

时间:2014-02-08 14:50:44

标签: html xml r

我想从给定的网页将数据导入R,比如this one

在源代码中(但不在实际页面上),我想要获取的数据存储在一行javascript代码中,如下所示:

chart_Line1.setDataXML("<graph rotateNames (stuff omitted) >
<set  value='699.99' name='16.02.2013'  />
<set  value='731.57' name='18.02.2013'  />  
<set  value='more values' name='more dates'  />
...
<trendLines> (now a different command starts, stuff omitted)
</trendLines></graph>")

(请注意,为了便于阅读,我已经包含了换行符;数据在原始文件的一行中。只需导入以chart_Line1.setDataXML开头的行 - 如果你在源代码中的第56行就足够了想亲眼看看)

我可以使用scan("URLofFile", what="raw")将整个html文件读成字符串,但是如何从中提取数据?

我可以使用what="..."指定数据格式,请记住,没有换行符来分隔数据,但是在不相关的前缀和后缀中有几个换行符?

这是否可以使用R工具以一种很好的方式完成,或者您是否建议应该使用不同的脚本来完成此数据采集?

1 个答案:

答案 0 :(得分:0)

通过一些试验&amp;错误,我能够找到包含数据的确切行。我阅读了整个html文件,然后处理所有其他行。

require(zoo)
require(stringr)
# get html data, scrap all lines but the interesting one
theurl <- "https://www.magickartenmarkt.de/Black_Lotus_Unlimited.c1p5093.prod"
sec <- scan(file =theurl, what = "character", sep="\n")
sec <- sec[45]
# extract all strings of the form "value='X'", where X is a 1 to 3 digit number with some separator and 2 decimal places
values <- str_extract_all(sec, "value='[0-9]{1,3}.[0-9]{2}'")
# dispose of all non-numerical, non-separator values
values <- str_replace_all(unlist(values),"[^0-9/.]","")
# get all dates in the form "name='DD.MM.YYYY"
dates <- str_extract_all(sec, "name='[0-9]{2}.[0-9]{2}.[0-9]{4}'")
# dispose of all non-numerical, non-separator values
dates <- str_replace_all(unlist(dates),"[^0-9/.]","")
# convert dates to canonical format
dates <- as.Date(dates,format="%d.%m.%Y")
# put values and dates into a list of ordered observations, converting the values from characters to numbers first.
MyZoo <- zoo(as.numeric(values),dates)