基本上,我想自动下载多个文件一次从网页-〉〉http://alertario.rio.rj.gov.br/download/dados-pluviometricos/
我目前正在学习以下教程:https://www.youtube.com/watch?v=BK_JBk_l5uQ;在这里:https://github.com/ggSamoora/TutorialsBySamoora/blob/main/R_downloader_Tutorial.R
但是,要下载它,我需要事先指定(选择)几个字段。检查以下图像。
有人能帮我自动化吗?
我目前的阶段:
#install.packages("RSelenium")
#install.packages("netstat")
#install.packages("binman")
# load the necessary packages
library(tidyverse)
library(RSelenium)
library(netstat)
binman::list_versions("geckodriver")
# "0.32.1" "0.32.2" "0.33.0"
# connecting to selenium server
rs_driver_object <- rsDriver(browser = 'firefox',
port = free_port())
# access the client object
remDr <- rs_driver_object$client
# open a web browser
remDr$open()
# navigate to the website containing the database
remDr$navigate("http://alertario.rio.rj.gov.br/download/dados-pluviometricos/")
我期待着下载所有的数据可从这个网页上的一个研究项目。
1条答案
按热度按时间pw9qyyiw1#
这个特殊的问题实际上并不需要RSelenium,所以如果您愿意接受更典型的方法,那么这个答案可能对您有用。网站使用POST请求将数据作为zip文件拉下,因此我们需要做的就是发出自己的POST请求。我更喜欢
httr
包,但你可以使用任何你喜欢的。我们通过手动提交单个请求并使用Chrome的devtools查看请求的内容来获取所需的信息(主体和标题):
在本例中,重要信息是请求URL
http://websempre.rio.rj.gov.br/dados/pluviometricos/plv/
请求报头
和请求正文(来自“Payload”选项卡)
我们现在要做的就是用一种R友好的方式把它们编码起来。我们需要请求体是一个命名的字符向量,所以我们使用
strsplit
,separate
和pull
(最后两个分别来自tidyr
和dplyr
包):这里的中间件令牌似乎也会随着每个请求而改变,因此您可能必须添加自己的中间件令牌。
然后添加必要的标题作为命名列表:
我注解掉了内容长度和内容类型,因为它们会导致问题,但其他所有内容基本上都是来自devtools任务栏的逐字记录。这里的cookie也可能会发生变化-您可能需要在提交自己的请求后添加自己的值。
然后,我们需要做的就是用参数发出POST请求。这里我使用write_disk(),因为我不知道如何在内存中进行解编码/解压缩。这里我只是把文件写到我的Downloads文件夹中,但是你可能想改变你的工作目录的路径。
但是,请注意,这只会拉下一年的文件。您将不得不编写一个快速循环,通过将当前请求体中的“1997”替换为1998、1999等,来从每年中提取文件。
最后,请注意,您正在使用大量请求这些数据的服务器,因此请注意请求率。