我想从我订阅的网站中提取一些数据。我可以手动提取csv文件,但每天都有一个文件,我想要5年的数据,所以这需要很长时间。
我使用rvest登录网站但是要下载我需要手动点击按钮的数据,我该如何在R中执行此操作?
当我手动执行此操作时,文件进入我的下载文件夹,因为我可以进行批量导入,所以完全没问题,但同样如果我可以将数据直接加载到R中会更容易。
这是我到目前为止所做的:
library(rvest)
url <-"http://www.horseracebase.com/index.php/"
pgsession <-html_session(url) ## create session
pgform <-html_form(pgsession)[[1]] ## pull form from session
filled_form <- set_values(pgform,
`login` = "xxx",
`password` = "yyy")
submit_form(pgsession,filled_form)
这让我登录(我认为),但现在我不知道如何提取数据?
我在Betfair做同样的事情,我用的是:
df <- read.csv("http://www.someurl.com/betfairdata.csv")
这样可以正常工作,但所有文件都列在实际页面上,因此不需要点击按钮。
有没有办法使用rvest与按钮交互,或者有没有办法找到正确的网址,以便我可以像上面那样使用read.csv
?
由于
答案 0 :(得分:3)
我创建了一个免费帐户并检查了该网站。
您似乎将.csv文件与HTML表格混为一起。在我可以找到的网站中没有任何.csv文件。当你说&#34;没有点击&#34;并且他们&#34;显示.csv文件&#34;它是您实际描述的HTML表格。
另外,网站的后端也没有.csv文件。后端是一个关系数据库,为许多过滤器和搜索功能提供支持。
说了这么多,关于如何使用rvest
和其他R软件包在文档,SO答案和Google上的各种博客中抓取XML和HTML表格的资源很多(如果没有在Stack Overflow文档中 - 我还没有检查,但它也可能在那里)。我会引用Stats and Things中的一个,但请注意html()
已被弃用,而不是read_html()
,但两者仍有效:
library("rvest")
url <- "http://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_population"
population <- url %>%
html() %>%
html_nodes(xpath='//*[@id="mw-content-text"]/table[1]') %>%
html_table()
population <- population[[1]]
head(population)
您可以使用Chrome或FireFox中的内置开发者工具来识别您需要提取的页面部分。您也可以使用像Firebug这样的第三方工具,但它并不是必需的。
例如:
/html/body/table[2]/tbody/tr/td/table[2]
当然,如果您想将解析后的结果保存到.csv(或任何其他类型)文件中,您可以在将其转换为data.frame
后{{1}或其他扁平物体:
data.table
请注意,有些人发现从write.csv(population, "population.csv", row.names=F)
包中抓取readHTMLTable()
表更容易,但两者都可以完成这项工作。