当前位置: 首页 > 知识库问答 >
问题:

如何使用rvest或rcurl在网页上进行点击

壤驷喜
2023-03-14

我想从这个网页下载数据

library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <-     "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

data <- url %>>%
  html() %>>%
  html_nodes(css) %>>%
  html_table() 

因此,如果我使用代码,我可以刮50个国家的数据。

+按钮是在JavaScript中创建的,所以我想知道在R中是否有方法单击该按钮然后刮取数据。

共有1个答案

计寒
2023-03-14

有时最好在ajax Web请求级别解决这个问题。对于这个网站,你可以使用Chrome的开发工具并查看请求。为了构建表(也包括整个表),它使用各种ajax-y参数将post发送到站点。只需复制它,对响应进行一点数据收集,你就可以开始了:

library(httr)
library(rvest)
library(dplyr)

res <- POST("http://www.tradingeconomics.com/",
            encode="form",
            user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.50 Safari/537.36"),
            add_headers(`Referer`="http://www.tradingeconomics.com/",
                        `X-MicrosoftAjax`="Delta=true"),
            body=list(
              `ctl00$AjaxScriptManager1$ScriptManager1`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$UpdatePanel1|ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
              `__EVENTTARGET`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
              `srch-term`="",
              `ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$GridView1$ctl01$DropDownListCountry`="top",
              `ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$ParameterContinent`="",
              `__ASYNCPOST`="false"))


res_t <- content(res, as="text")
res_h <- paste0(unlist(strsplit(res_t, "\r\n"))[-1], sep="", collapse="\n")

css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

tab <- html(res_h) %>% 
  html_nodes(css) %>%
  html_table() 

tab[[1]]$COUNTRIESWORLDAMERICAEUROPEASIAAUSTRALIAAFRICA

glimpse(tab[[1]]

另一种选择是使用RSelenium转到页面,单击“+”,然后刮取结果表。

 类似资料:
  • 我不太擅长使用Kerberos。但是我想用Kerberos实现单点登录。 我想实现的目标是,您只需使用Windows 7登录,然后打开浏览器,并且不需要其他身份验证,例如Intranet。这可能吗? Kerberos使用票证。第一步是获取票证授予票证,不是吗?Windows Server正在使用Kerberos进行身份验证。那么在Windows中登录后是否有票证授予票证?我可以使用它(如果有的话)

  • 我正在使用javascript(extensions chrome)在程序“Atom”中制作一个机器人,并希望点击按钮“添加到购物车”。我的html是。我猜我在使用值时需要这样做。怎么做?

  • 本文向大家介绍如何在Docker上使用OVS Bridge进行联网?,包括了如何在Docker上使用OVS Bridge进行联网?的使用技巧和注意事项,需要的朋友参考一下 OVS桥接器或Open vSwitch桥接器被用作Linux中本机桥接器的替代。它支持物理交换机中的大多数功能,同时还支持单个网桥上的多个vLAN。它也被广泛用于Docker网络中,因为与本地网桥相比,它被证明对多主机网络很有用

  • 问题内容: 我想从网站上获取每天的日出/日落时间。是否可以使用Python抓取网络内容?使用什么模块?有没有可用的教程? 问题答案: 结合使用urllib2和出色的BeautifulSoup库:

  • 问题内容: 我想使用itext生成pdf。我会在某些时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上插入。有任何想法吗??? 问题答案: 调用告诉iText将后续对象放置在新页面上。仅当您放置下一个对象时,才会真正创建新页面。另外,仅在当前页面不为空白时创建一个新页面;否则,仅创建一个新页面。否则,它将被忽略;您可以用来克服这一点。 请参见下面的链