【问题标题】:scraping historical shareprices using Rvest is not working使用 Rvest 抓取历史股价不起作用
【发布时间】:2021-05-22 08:30:46
【问题描述】:

我正在尝试从网页中提取历史股价信息。但是,rvest 会引发 xml 错误。

我是这方面的新手,有人可以帮助我了解如何进行这项工作吗?

这是我使用 rvest 的 R 脚本

share_url <- "https://www.moneycontrol.com/stocks/hist_stock_result.php?ex=B&sc_id=ITC&mycomp=ITC"
share.data<- read_html(share_url)
share_css<-"#mc_mainWrapper > div.PA10 > div.FL > div.PT15 > div.MT12 > table > tbody"

share_table<- share.data %>% read_html() %>% html_nodes("table") %>% html_table()

错误:

UseMethod("read_xml") 中的错误:没有适用的方法 'read_xml' 应用于类“c('xml_document', 'xml_node')"

【问题讨论】:

  • 您在错误的对象类型上再次调用 read_html。改为share.data %&gt;% html_nodes("table") %&gt;% html_table()
  • 谢谢@QHarr - 尝试了你的建议 - 但得到了这个错误矩阵中的错误(unlist(values),ncol = width,byrow = TRUE):'data'必须是向量类型,是'空
  • 那么您的 css 选择器与返回的 html 文档中的任何内容都不匹配。它可能是错误的 css 选择器,或者目标元素是 js 渲染的,因此不存在于您从 rvest 返回的内容中。您需要在浏览器中检查返回的 html 或暂时关闭 js 并检查您的目标元素。
  • 目前,我在该页面上看不到任何数据或日期范围
  • moneycontrol.com/stocks/… - 这是链接 url,这是选择器工具为表格返回的内容 - .PA10 , tr:nth-child(4) td... 我不太熟悉 Java或 CSS,所以我无法对此发表评论。感谢您在这里帮助我 Q Harr

标签: r web-scraping rvest


【解决方案1】:

更改日期时有如下调用:

POST https://www.moneycontrol.com/stocks/hist_stock_result.php

正文是用以下数据(从和至今)编码的表单 url:

frm_dy = "01",
frm_mth = "01",
frm_yr = "2020",
to_dy = "01",
to_mth = "01",
to_yr = "2021",
hdn = "daily"

以下代码使用httrrvest获取表格数据:

library(rvest)
library(httr)

resp <- POST(
    "https://www.moneycontrol.com/stocks/hist_stock_result.php",
    query = list(
        ex = "B",
        sc_id = "ITC",
        mycomp = "ITC"
    ),
    body = list(
        frm_dy = "01",
        frm_mth = "01",
        frm_yr = "2020",
        to_dy = "01",
        to_mth = "01",
        to_yr = "2021",
        hdn = "daily"
    ), 
    encode = "form")

table <- html_table(content(resp),fill=TRUE)[[3]]

print(table)

kaggle link

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2011-03-23
    • 2023-01-13
    • 1970-01-01
    • 2021-09-30
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多