【问题标题】:Unable to download a file with rvest/httr after submitting search form提交搜索表单后无法使用 rvest/httr 下载文件
【发布时间】:2020-06-21 23:05:34
【问题描述】:

这似乎是一个简单的问题,但我已经为此苦苦挣扎了几天。这是一个最小的工作示例,而不是实际问题:

This question 似乎很相似,但我无法使用答案来解决我的问题。

在浏览器中,我转到this url,然后单击[搜索](无需从列表中进行任何选择),然后单击[下载结果](例如,选择 Xlsx 选项)。然后下载文件。

为了在 R 中实现自动化,我尝试过:

library(rvest)

url1 <- "https:/secure.gamblingcommission.gov.uk/PublicRegister/Search"
sesh1 <- html_session(url1)
form1    <-html_form(sesh1)[[1]]
subform <- submit_form(sesh1, form1)

使用 Chrome 开发者工具,我找到了用于启动下载的 url,所以我尝试:

url2 <- "https:/secure.gamblingcommission.gov.uk/PublicRegister/Search/Download"
res <- GET(url = url2, query = list(format = "xlsx"))

但是这不会下载文件:

> res$content
  raw(0) 

我也试过

download.file(url = paste0(url2, "?format=xlsx") , destfile = "down.xlsx", mode = "wb")

但这不会下载任何内容:

> Content type '' length 0 bytes
> downloaded 0 bytes

请注意,在浏览器中,粘贴 url2 并添加 format 查询会启动下载(在从 url1 进行搜索之后)

我认为我应该以某种方式使用初始代码块中的会话信息来进行下载,但到目前为止我不知道如何。

提前感谢您的帮助!

【问题讨论】:

  • 你需要使用jump_to

标签: r web-scraping rvest


【解决方案1】:

你快到了,你的直觉是正确的关于使用会话信息。

您只需要使用rvest::jump_to 导航到第二个网址,然后将其写入磁盘:

library(rvest)

url1 <- "https:/secure.gamblingcommission.gov.uk/PublicRegister/Search"
sesh1 <- html_session(url1)
form1    <-html_form(sesh1)[[1]]
subform <- submit_form(sesh1, form1)

url2 <- "https://secure.gamblingcommission.gov.uk/PublicRegister/Search/Download"

#### The above is your original code - below is the additional code you need:

download <- jump_to(subform, paste0(url2, "?format=xlsx"))
writeBin(download$response$content, "down.xlsx")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 2023-04-08
    • 2022-09-25
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多