【问题标题】:Extracting .csv files from a website从网站中提取 .csv 文件
【发布时间】:2017-01-01 10:48:41
【问题描述】:

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

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

我在必发做同样的事情,我使用类似的东西:

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

这很好用,但他们的所有文件都列在实际页面上,因此无需点击按钮。

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

谢谢

【问题讨论】:

  • @Floo0 我试过了,但没有成功,我没有任何例子可以工作。

标签: r web-scraping rvest


【解决方案1】:

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

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

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

话虽如此,在文档、SO 答案和 Google 上的各种博客(如果不在 Stack溢出文档——我没有检查,但它可能也在那里)。我将引用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 等 3rd 方工具,但这并不是必需的。

例如:

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

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

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

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

【讨论】:

  • 感谢您的回复并花时间查看该网站。 csv 文件是通过导航到“结果 -> 结果搜索”获得的,然后您可以输入一天并单击“开始!”这会在屏幕上显示一些结果。然后,您可以在 csv 文件或 excel 文件中提取更多数据。看起来我可以从网站上单独获取所有数据并自己将它们拼凑在一起,但所有这些都在 excel 文件中为我完成。鉴于我想提取 5 年的数据,我想我希望得到最简单的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
相关资源
最近更新 更多