自动从URL位置下载内容,而不是用HTML编写的.使用软件导航,按下按钮,下载内容

Automatically downloading content from a URL location not written in HTML. Using software to navigate, press a button and download the content

本文关键字:下载 按钮 软件 导航 URL 位置 HTML      更新时间:2023-09-26

一段时间以来,我一直在使用RRCurl包从网页上自动下载信息;我通常使用简单的函数,如getURL()getForm()postForm()。我通常只是找到HTML参数可选值并填充它们。但是,我遇到了一个网页,我认为使用传统的功能无法下载,因为我在url地址中找不到任何参数。我相信这是因为网页是写在javascript,我不知道如何处理它。我是一名数学家,使用R有丰富的经验,但对HTML有非常基本的了解,对javascript一无所知。

我不一定需要直接使用R,我可以使用其他软件,然后从R导入。我找到了一个名为mozrepl的Mozilla应用程序,但我无法使其工作。如果有人有更多的经验可以帮助我解决方案,我将不胜感激,是否使用不同的软件或把适当的命令在Rmozrepl。如果不能直接将信息下载到R变量中,则可以将其保存到文本文件中。

我想要下载的信息是在选择以下url中的日期值然后点击名为"consultartiie"的按钮后产生的。生成一个包含变量"Posturas""Montos""Participantes"的表。

http://www.banxico.org.mx/tiieban/leeArgumentos.faces?BMXC_plazo=28& BMXC_semanas = 4

我这样做是因为我的最终目标是把信息放在一起到一个数据框

这里javascript没有问题。javascript简单地创建了日历,这样您就可以选择提交到表单的日期。然而,还有很多其他的问题。

在服务器端,似乎他们试图检测无浏览器试图提取数据。此外,一旦表单正确提交,他们有一个重定向,这会导致问题。

require(RCurl)
require(XML)
appDate <- "20130502"
rURL <- "http://www.banxico.org.mx/tiieban/leeArgumentos.faces?BMXC_plazo=28&BMXC_semanas=4"
usera <- "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0"
curl <- getCurlHandle(cookiefile = "", verbose = TRUE, useragent = usera
                      , followlocation = TRUE, autoreferer = TRUE, postredir = 2
                      , httpheader = c(Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                                       "Accept-Encoding" = "gzip, deflate"
                                       , "Accept-Language" =  "en-US,en;q=0.5"
                                       , Connection = "keep-alive"), referer = "http://www.banxico.org.mx/tiieban/leeArgumentos.faces")
txt <- getURLContent(rURL, curl = curl, verbose = TRUE)
fParams <- structure(c(appDate, "Consultar+TIIE", "leeArgumentos")
                     ,.Names = c( "leeArgumentos%3Afecha", "leeArgumentos%3Asubmit", "leeArgumentos"))
res <- postForm(rURL, .params = fParams, style = "post", curl = curl, binary = TRUE)
xRes <- htmlParse(rawToChar(res))
readHTMLTable(getNodeSet(xRes, "//*/table")[[3]])
  Posturas Montos                      Participantes
1   4.3100    350 Banco Credit Suisse (México), S.A.
2   4.3245    350                 Banco Inbursa S.A.
3   4.3200    350                   Banco Invex S.A.
4   4.3375    350     Banco Mercantil del Norte S.A.
5   4.3350    350      Banco Nacional de México S.A.
6   4.3250    350                   HSBC México S.A.
7   4.3300    350          ScotiaBank Inverlat, S.A.
有许多事情正在发生。表单的参数需要编码。例如,leeArgumentos:fecha必须是leeArgumentos%3Afecha。用户代理可能被检测为引用字符串和各种其他标头。

这看起来确实像一个javascript问题,而不是直接与r中的网页抓取相关的问题。

有很多方法可以解决这个问题,你可以看看抓取Javascript生成的数据,以及语言中关于web抓取Javascript内容的建议

您指向的示例似乎运行一个自定义脚本,show_calendar2,在这里定义http://www.banxico.org.mx/tiieban/scripts/ts_picker2.js