1

我正在尝试使用 rvest 获取表中的所有 href。到目前为止我做了什么:

library(rvest)
library(stringr)
library(tidyverse)


url <- "https://br.advfn.com/bolsa-de-valores/bovespa/suzano-on-SUZB3/opcoes"

html1 <- read_html(url)

tbls2 <- html1 %>%
               html_nodes("#options-table") %>%
               html_table(fill = TRUE) %>%
               .[[1]]

它返回tbls2为:

[1] Ativo              Tipo               Preço de Exercício Variação (%)      
[5] Volume             Vencimento         Modelo            
<0 rows> (or 0-length row.names)

hrefs应该在Ativo列的每个元素中。为什么这会返回一个空表?

4

1 回答 1

3

如果您查看页面源并导航到 id 为“options-table”的表格,您将看到表格正文为空。这是因为该表是使用来自外部数据源的 javascript 填充的。

如果我们转到 chrome 开发人员工具 -> 网络并按“XHR”过滤,我们可以看到页面正在发出的 api 请求。在这种情况下,很清楚我们想要哪一个:

在此处输入图像描述

发现数据的来源后,我们可以直接使用jsonlite

library(jsonlite)
url <- 'https://br.advfn.com/common/bov-options/api?symbol=SUZB3&_=1576171286512'
jsn <- fromJSON(url)
df1 <- jsn$result 

dplyr::glimpse(df1)

# Observations: 100
# Variables: 10
# $ symbol            <chr> "SUZBL400", "SUZBX365", "SUZBX283", "SUZBX288", "SUZBX300", "SUZBL386", "SUZBX298",…
# $ type              <chr> "Call", "Put", "Put", "Put", "Put", "Call", "Put", "Put", "Put", "Put", "Put", "Put…
# $ style             <chr> "A", "E", "E", "E", "E", "A", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "A"…
# $ strike_price      <chr> "40,06", "36,56", "28,31", "28,81", "30,06", "38,56", "29,81", "30,56", "31,06", "3…
# $ expiry_date       <chr> "16/12/2019", "16/12/2019", "16/12/2019", "16/12/2019", "16/12/2019", "16/12/2019",…
# $ volume            <chr> "5000", "2000", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", ""…
# $ volume_form       <chr> "5.000", "2.000", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", …
# $ change_percentage <chr> "76,47%", "-16,67%", "0,0%", "0,0%", "0,0%", "0,0%", "0,0%", "0,0%", "0,0%", "0,0%"…
# $ url               <chr> "/p.php?pid=quote&symbol=BOV%5ESUZBL400", "/p.php?pid=quote&symbol=BOV%5ESUZBX365",…
# $ class             <chr> "up", "dn", "nc", "nc", "nc", "nc", "nc", "nc", "nc", "nc", "nc", "nc", "nc", "nc",…


于 2019-12-12T17:33:03.733 回答