gpt4 book ai didi

R - 如何使用 rvest 或 rcurl 单击网页

转载 作者:行者123 更新时间:2023-12-03 02:35:59 26 4
gpt4 key购买 nike

我想从this webpage下载数据

可以使用rvest轻松抓取数据。

代码可能是这样的:

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

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

但是这样的网页有一个问题。

有一个+按钮可以显示所有国家的数据,但默认只有50个国家的数据。

因此,如果我使用该代码,我可以抓取 50 个国家/地区的数据。

+按钮是用javascript制作的,所以我想知道R中是否有办法单击该按钮,然后抓取数据。

最佳答案

有时最好在 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 转到该页面,单击“+”,然后抓取结果表。

关于R - 如何使用 rvest 或 rcurl 单击网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com