【问题标题】:Web Scraping in R to extract data from multiple pagesR中的Web Scraping从多个页面中提取数据
【发布时间】:2022-01-18 20:58:14
【问题描述】:

我正在尝试阅读显示https://stockanalysis.com/stocks/ 市值详细信息的表格

下面的代码只读取前 500 个观察值,因为它正在读取的网站在第一页上只显示 500 个。

需要帮助确定我需要使用哪些 HTML 元素才能从所有页面中提取数据。感谢Vishal A,在这里我使用了“符号表”对象

library(rvest)
library(dplyr)
url <- ("https://stockanalysis.com/stocks/")

page <- read_html(url)

stocks <- page %>%
  html_nodes('table#symbol-table') %>%
  html_table() %>% .[[1]]
stocks

【问题讨论】:

    标签: html r web-scraping


    【解决方案1】:

    观察:

    如果您向下滚动页面,您会看到有一个选项可以批量请求更多结果。在这种特殊情况下,设置为最大批量大小会一次性返回所有结果。

    在请求更多结果时监控网络流量没有显示额外流量,这意味着数据存在于原始响应中。

    在页面源中搜索最后一个符号会发现所有项目都预加载在脚本标记中。检查 JavaScript 源文件会显示根据各种输入参数将新批次推送到页面上的说明。


    解决方案:

    您可以简单地从 script 标记中提取 JavaScript 对象并解析为 JSON。将列表列表转换为数据框,然后添加基于公共基本字符串 + 符号的构造 url。


    待办事项:

    1. 您是否希望更新标题名称
    2. 您可能希望格式化数字列以匹配网页格式

    R:

    library(rvest)
    library(jsonlite)
    library(tidyverse)
    
    r <- read_html('https://stockanalysis.com/stocks/') %>% 
      html_element('#__NEXT_DATA__') %>% 
      html_text() %>% 
      jsonlite::parse_json()
    
    df <- map_df(r$props$pageProps$stocks,  ~ .x)%>%
          mutate(url = paste0('https://stockanalysis.com/stocks/', s))
    

    样本输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2022-11-13
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多