【问题标题】:Scraping multiple table out of webpage in R从R中的网页中抓取多个表格
【发布时间】:2015-04-29 06:00:21
【问题描述】:

我正在尝试将共同基金数据提取到 R 中,我的代码方式适用于单个表格,但是当网页中有多个表格时,它不起作用。

链接 - https://in.finance.yahoo.com/q/pm?s=115748.BO

我的代码

url <- "https://in.finance.yahoo.com/q/pm?s=115748.BO"
library(XML)
perftable <- readHTMLTable(url, header = T, which = 1, stringsAsFactors = F)

但我收到一条错误消息。

(函数(类,fdef,mtable)中的错误: 无法为签名“NULL”找到函数“readHTMLTable”的继承方法 另外:警告信息: XML 内容似乎不是 XML:'https://in.finance.yahoo.com/q/pm?s=115748.BO'

我的问题是

  1. 如何从这个网页中拉出一个特定的表?
  2. 如何将所有表格拉出此网页?
  3. 当有多个链接时,从每个网页中提取特定表格的简单方法是什么

Ahttps://in.finance.yahoo.com/q/pm?s=115748.BO

Ahttps://in.finance.yahoo.com/q/pm?s=115749.BO

Ahttps://in.finance.yahoo.com/q/pm?s=115750.BO

在使用链接时从链接中删除“A”。

【问题讨论】:

    标签: r data.table screen-scraping


    【解决方案1】:

    Base R 无法访问https。你可以使用像RCurl 这样的包。表格上的标题实际上是单独的表格。该页面实际上由 30 多个表格组成。您想要的数据最类似于带有class = yfnc_datamodoutline1 的表格:

    url <- "https://in.finance.yahoo.com/q/pm?s=115748.BO"
    library(XML)
    library(RCurl)
    appData <- getURL(url, ssl.verifypeer = FALSE)
    doc <- htmlParse(appData)
    appData <- doc['//table[@class="yfnc_datamodoutline1"]']
    perftable <- readHTMLTable(appData[[1]], stringsAsFactors = F)
    > perftable
    V1      V2
    1            Morningstar Return Rating:    2.00
    2                  Year-to-Date Return:   2.77%
    3                5-Year Average Return:   9.76%
    4                   Number of Years Up:       4
    5                 Number of Years Down:       1
    6  Best 1 Yr Total Return (2014-12-31):  37.05%
    7 Worst 1 Yr Total Return (2011-12-31): -27.26%
    8         Best 3-Yr Total Return (N/A):  23.11%
    9        Worst 3-Yr Total Return (N/A):  -0.33%
    

    【讨论】:

    • 非常感谢,如果我需要更多帮助,我将进一步探索并发表评论。
    【解决方案2】:

    这是一个rvest 版本,增加了从每个基金页面提取特定表格的功能:

    library(rvest)
    library(dplyr)
    
    pages <- c("https://in.finance.yahoo.com/q/pm?s=115748.BO", 
               "https://in.finance.yahoo.com/q/pm?s=115749.BO",
               "https://in.finance.yahoo.com/q/pm?s=115750.BO")
    
    
    extract_tab <- function(sources, tab_idx) {
    
      data <- lapply(sources, function(x) {
    
        pg <- html(x)
        pg %>% html_nodes(xpath="//table[@class='yfnc_datamodoutline1']//table") -> tabs
        html_table(tabs[[tab_idx]])
    
      })
    
      names(data) <- gsub("pm\\?s=", "", basename(sources))
    
      data
    
    }
    
    extract_tab(pages, 1)
    
    ## $`115748.BO`
    ##                                      X1      X2
    ## 1            Morningstar Return Rating:    2.00
    ## 2                  Year-to-Date Return:   2.77%
    ## 3                5-Year Average Return:   9.76%
    ## 4                   Number of Years Up:       4
    ## 5                 Number of Years Down:       1
    ## 6  Best 1 Yr Total Return (2014-12-31):  37.05%
    ## 7 Worst 1 Yr Total Return (2011-12-31): -27.26%
    ## 8         Best 3-Yr Total Return (N/A):  23.11%
    ## 9        Worst 3-Yr Total Return (N/A):  -0.33%
    ## 
    ## $`115749.BO`
    ##                                      X1      X2
    ## 1            Morningstar Return Rating:    2.00
    ## 2                  Year-to-Date Return:   2.77%
    ## 3                5-Year Average Return:   9.77%
    ## 4                   Number of Years Up:       4
    ## 5                 Number of Years Down:       1
    ## 6  Best 1 Yr Total Return (2014-12-31):  37.05%
    ## 7 Worst 1 Yr Total Return (2011-12-31): -27.22%
    ## 8         Best 3-Yr Total Return (N/A):  23.11%
    ## 9        Worst 3-Yr Total Return (N/A):  -0.30%
    ## 
    ## $`115750.BO`
    ##                               X1    X2
    ## 1     Morningstar Return Rating:      
    ## 2           Year-to-Date Return: 1.95%
    ## 3         5-Year Average Return: 8.92%
    ## 4            Number of Years Up:      
    ## 5          Number of Years Down:      
    ## 6     Best 1 Yr Total Return ():   N/A
    ## 7    Worst 1 Yr Total Return ():   N/A
    ## 8  Best 3-Yr Total Return (N/A):   N/A
    ## 9 Worst 3-Yr Total Return (N/A):   N/A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多