从网站中提取.csv文件

时间:2017-01-01 10:48:42

标签: r web-scraping rvest

我想从我订阅的网站中提取一些数据。我可以手动提取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

由于

1 个答案:

答案 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这样的第三方工具,但它并不是必需的。

例如:

  1. 在浏览器中登录并单击“研究”
  2. 点击统计
  3. 点击Jockey 7 Day Performance
  4. 打开开发人员工具
  5. 点击显示&#34;选择要检查的元素&#34;
  6. 的按钮
  7. 悬停或点击HTML表格
  8. 突出显示的源代码对应于此表 - 右键单击​​突出显示的源代码
  9. 点击&#34;复制X-Path&#34;
  10. 您的剪贴板现在具有目标 - 在此示例中为/html/body/table[2]/tbody/tr/td/table[2]
  11. 当然,如果您想将解析后的结果保存到.csv(或任何其他类型)文件中,您可以在将其转换为data.frame后{{1}或其他扁平物体:

    data.table

    请注意,有些人发现从write.csv(population, "population.csv", row.names=F)包中抓取readHTMLTable()表更容易,但两者都可以完成这项工作。