r - 从网站提取 .csv 文件

标签 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 与按钮进行交互,或者有没有办法找到正确的 URL,这样我就可以像上面那样使用 read.csv

谢谢

最佳答案

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

看起来您正在将 .csv 文件与 HTML 表格合并。我在网站上找不到任何 .csv 文件。当您说“没有点击”并且它们“显示 .csv 文件”时,您实际上描述的是一个 HTML 表格。

顺便说一句,网站后端也没有 .csv 文件。后端是一个关系数据库,为许多过滤器和搜索功能提供支持。

话虽如此,在文档、SO 答案以及 Google 上的各种博客中,有大量关于如何使用 rvest 和其他 R 包抓取 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 等第 3 方工具,但这并不是真正必要的。

例如:

  1. 在浏览器中登录并点击“研究”
  2. 点击统计
  3. Click Jockey 7 天表现
  4. 打开开发者工具
  5. 点击“选择一个元素进行检查”按钮
  6. 将鼠标悬停或单击 HTML 表格
  7. 突出显示的源代码对应于此表 - 右键单击​​突出显示的源代码
  8. 点击“复制 X 路径”
  9. 您的剪贴板现在有了目标 - 在本示例中为 /html/body/table[2]/tbody/tr/td/table[2]

当然,如果您想将解析结果保存到 .csv(或任何其他类型)文件中,您可以在将其放入 data.frame 后执行此操作, data.table,或其他平面对象:

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

请注意,有些人发现使用 XML 包中的 readHTMLTable() 来抓取表格更容易,尽管两者都可以完成这项工作。

关于r - 从网站提取 .csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414911/

相关文章:

r - 在 R 中制作交互式图形

R Shiny 仪表板: How to add vertical scrollbar to dashboard sidebar?

python - 使用 python 抓取 iFrame

python - Json,抓取到网页 - python

r - 在 Rstudio 中使用 rvest 抓取时,我得到了与网络上不同的 html 文本

html - 如何在 R 中发布一个简单的 HTML 表单?

R:如何向函数添加参数(特别是 `...` )?

php - 如何使用 php 自动抓取网页?

html - 使用 rvest 从 html 中抓取对象

windows - 运行 build() 在 RStudio 中创建 R 包后出错