【问题标题】:Change a dropdown list in a page using R使用 R 更改页面中的下拉列表
【发布时间】:2020-09-07 22:00:42
【问题描述】:

在这个页面https://english.mubasher.info/markets/EGX/stocks/IRAX/financial-statements 有一个下拉列表可以更改显示的财务报表期间,我想更改为“年度预算”,然后刮掉财务数据。

我使用以下 R 代码将其视为一种形式:

pgsession<-html_session("https://english.mubasher.info/markets/EGX/stocks/IRAX/financial-statements") 
pgform<-html_form(pgsession)[[1]]

结果如下:

<form> '<unnamed>' (GET javascript:;)
  <select> '' [0/1]

任何想法!

【问题讨论】:

    标签: javascript r forms web-scraping


    【解决方案1】:

    页面使用JS改变输出。所有数据都存储在变量midata.financialStatement中: 下一步是将此变量转换为 JSON 字符串。打开控制台并运行: JSON.stringify(midata.financialStatement) 复制带有外部双引号的结果并将其保存到 .json 文件中。 使用jsonlite::fromJSON() 读取文件。 结果是在 R 中读取的 JSON 对象,您可以从中提取数据: 你从这里拿走。 例如,第二季度的数据是这样获得的:

    purrr::map_dfr(1:3, function(i) data$periods$sections[[2]]$records[[i]])
    

    结果:

                                                   label values.2016 values.2017 values.2018 values.2019 values.2020
    1                                       Total Assets 19072955288 33794300569 34844771073 34960374490          NA
    2                                  Total Liabilities 14440797107 23808120010 25334580748 28815017851          NA
    3    Total Owners' Equity & Minority Interest Equity  4632158181  9986180559  9510190325  6145356639          NA
    4           Total Liabilities & Shareholders' Equity 19072955288 33794300569 34844771073 34960374490          NA
    5                                 Net Income or Loss  -274642239   252218095   703016650  -249721710          NA
    6                                       Gross Profit   277077388   957501209  1814861030   624842327          NA
    7  Net Cash Flow from (Used In) Operating Activities  -950298536   292022267    36383940 -1153033283          NA
    8  Net Cash Flow from (Used In) Investing Activities    22438364   -33157784    30697312   -84466835          NA
    9  Net Cash Flow from (Used In) Financing Activities   600461061  -111949845  -868421362  1212066785          NA
    10             Net Change In Cash & Cash Equivalents  -327399111   146914638  -801340110   -25433333          NA
    

    更新: 要在 R 中使用编码实现结果,您需要 V8 包:

    library(rvest)
    library(V8)
    url <- "https://english.mubasher.info/markets/EGX/stocks/IRAX/financial-statements"
    jscode <- read_html(url) %>%
      html_nodes(xpath = "//script[contains(., 'midata.financialStatement')]") %>%
      html_text(trim = T)
    jscode <- stringr::str_sub(jscode, start = 8) 
    ct <- V8::new_context()
    ct$eval(jscode) # execute JS
    data <- ct$get("financialStatement")
    period <- 'Fourth Quarter' # change to the period you want here
    idx <- match(period, data$periods$label)
    period_data <- purrr::map_dfr(1:3, function(i) data$periods$sections[[idx]]$records[[i]])
    

    这应该可以,但有时我发现数据缺少一两个部分。

    【讨论】:

    • 感谢您的回答能否分享完整的代码,我也想知道如何使用 httr/rvest 包更改下拉列表。
    猜你喜欢
    • 2019-01-01
    • 2011-08-11
    • 2017-05-17
    • 2014-06-29
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2013-07-03
    相关资源
    最近更新 更多