【问题标题】:R scrape multiple png filesR抓取多个png文件
【发布时间】:2021-05-26 15:27:34
【问题描述】:

我曾尝试查看其他主题,但看起来它们与我的问题无关。我正在尝试使用 R 从https://tradingeconomics.com/ 的“指标”部分刮取多个 .png 图 对于任何指标,都有多个国家数据,每个国家页面都包含一个图表。我想找到一种通过单个例程为每个国家/地区抓取 png 文件的方法。 我已经尝试了第一个指标(“增长率”),但我的代码如下:

   library(stringr)
   library(dplyr)
   library(rvest) 

   tradeec <- read_html("https://tradingeconomics.com/country-list/gdp-growth-rate")
   tradeec_countries <- tradeec %>% html_nodes("td:nth-child(1)") %>%
   html_text()
   tradeec_countries <- str_replace_all(tradeec_countries, "[\r\n]" , "")
   tradeec_countries <- as.data.frame(tradeec_countries)
   tradeec_countries <- tradeec_countries[-c(91:95), ]

   tradeec_plots <- paste0("https://d3fy651gv2fhd3.cloudfront.net/charts", tradeec_countries, "-gdp-growth.png?s=", i)

尽管如此,我还没有达到我的目标。 有什么提示吗?

【问题讨论】:

    标签: r web-scraping png


    【解决方案1】:

    更新答案

    例如linkworld列中的所有数字都可以使用以下代码获取。其他列,如Europe、America、Asia、Australia、G20也可以类似获取。

    page <- read_html("https://tradingeconomics.com/country-list/gdp-growth-rate")
    url_init <- "https://tradingeconomics.com"
    country_list <- html_nodes(page,"td a") %>% html_attr("href")
    world_list <- paste(url_init,country_list,sep = "")
    
    page_list <- vector(mode = "list")
    
    for(page_index in 1:length(world_list)) {
        page_list[[page_index]] = read_html(world_list[page_index])
    }
    
    for (i in 1:length(page_list)) {
      figure_link <- html_nodes(page_list[[i]],"#ImageChart") %>% html_attr("src")
      figure_name <- gsub(".*charts/(.*png).*","\\1",figure_link,perl = TRUE)
      figure_name <- paste(i,"_",figure_name)
      download.file(figure_link,figure_name)
    }
    

    原答案

    以下代码可以获取图的链接和名称。

    tradeec <- read_html("https://tradingeconomics.com/south-africa/gdp-growth")
    figure_link <- html_nodes(tradeec, "#ImageChart") %>% html_attr("src")
    figure_name <- gsub(".*charts/(.*png).*", "\\1", figure_link, perl = T)
    download.file(figure_link,figure_name)
    

    然后您可以将链接中的 south-africa 替换为您想要的一系列国家/地区。

    【讨论】:

    • 非常感谢您的提示。它确实完美无缺。不过,我正试图找到一种方法来在一个例程中刮掉所有国家的阴谋。你觉得可行吗?
    • 新的很棒,非常感谢。我不知道如何编写双 for 循环。我要研究它,现在。再次感谢!
    • 很高兴能为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2017-12-24
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多