我想从给定的网页将数据导入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工具以一种很好的方式完成,或者您是否建议应该使用不同的脚本来完成此数据采集?
答案 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)