2017-01-01 129 views
0

我想从我订阅的网站提取一些数据。我可以手动提取csv文件,但每天都有一个文件,我需要5年的数据,因此需要很长时间。从网站中提取.csv文件

我已经使用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) 

这让我登录(我认为),但现在我不知道如何提取数据?

我做同样的事情必发在这里我使用类似:

df <- read.csv("http://www.someurl.com/betfairdata.csv") 

这工作得很好,但他们所有的文件都实际页,因此无需按键的点击列出。

有没有什么方法可以使用rvest与按钮进行交互,或者有找到正确的URL的方法,所以我可以像上面那样使用read.csv

谢谢

+0

@ Floo0我试过没有成功,我无法获得任何示例工作。 – MidnightDataGeek

回答

2

我创建了一个免费帐户,并检查了网站。

看起来像您正在将.csv文件与HTML表格混淆。在我找不到任何.csv文件的网站中,无处可见。当你说“没有点击”并且他们“显示.csv文件”时,它就是你实际描述的HTML表格。

在附注中,网站后端也没有.csv文件。后端是一个关系数据库,它为许多过滤器和搜索功能提供动力。

说了这么多,对于如何使用rvest刮XML和HTML表格和其它的R文档中两种封装,在SO答案,并在谷歌各种博客(如果不是在堆栈溢出了大量的资源文档 - 我没有检查,但它可能也在那里)。我引用一个来自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等第三方工具,但并非真正必要。

例如:

  1. 在您的浏览器登录,点击研究
  2. 点击统计
  3. 点击赛马7日表现
  4. 开放开发工具
  5. 单击说按钮“选择元素来检查它“
  6. 悬停或单击HTML表格
  7. 高亮显示的源代码对应这个表 - 右键单击​​突出显示的源代码
  8. 点击“复制x路”
  9. 剪贴板现在有目标 - 在这个例子中是/html/body/table[2]/tbody/tr/td/table[2]

当然,如果你想你的分析结果保存到.csv(或任何其他形式的)文件,你能做到,你有它变成一个data.framedata.table,或其他平面物体后:

write.csv(population, "population.csv", row.names=F)

请注意,有些人发现从XML软件包中用readHTMLTable()刮取表格更容易,但两者都可以完成这项工作。

+0

感谢您的回复,并花时间查看网站。 通过导航到“结果 - >结果搜索”获得csv文件 然后,您可以输入一天并单击“开始!”然后在屏幕上显示一些结果。然后,您可以在csv文件或Excel文件中提取更多数据。 它看起来像我可以从网站中分别获取所有数据,并将它们拼凑在一起,但它的所有数据都是在Excel文件中完成的。鉴于我想提取5年的数据,我想我是希望最简单的选择。 – MidnightDataGeek