【问题标题】:Using rvest to scrape ASX使用 rvest 抓取 ASX
【发布时间】:2023-01-07 09:48:29
【问题描述】:

我正在尝试从 ASX(澳大利亚证券交易所)网站上抓取数据。例如BHP on ASX,页面底部是一组基本面数据。值的选择器,例如 eps,是:

#company_key_statistics > div > div.panel-body.row > div:nth-child(3) > table > tbody > tr:nth-child(8) > td

我试过了

library(rvest)
ASX_bhp <-read_html("https://www2.asx.com.au/markets/company/bhp")
ASX_data <- ASX_bhp |> html_elements("td") |> html_text()

或者代替“td”,我尝试了“tr”、“#company_key_statistics”或整个选择器字符串。但是,所有返回一个空字符。我也试过 html_nodes 而不是 html_elements

我应该如何从该站点提取基本数据?

【问题讨论】:

    标签: web-scraping rvest stock


    【解决方案1】:

    所有这些数据都是通过 JavaScript 获取和呈现的,因此它不可用于 rvest(至少不能通过该 URL)。但是你可以使用他们的 API:

    library(jsonlite)
    bhp <- fromJSON("https://asx.api.markitdigital.com/asx-research/1.0/companies/bhp/key-statistics")
    bhp$data$earningsPerShare
    #> [1] 5.95708
    

    创建于 2022-09-19 reprex v2.0.2

    【讨论】:

    • 非常感谢@margusl!你怎么知道所有数据都是通过 JavaScript 获取和呈现的?
    • 您可以只为该站点使用 js,但也很容易从浏览器开发工具的网络选项卡中发现它。而不是 Element Inspector,查看实际源代码并搜索您希望在渲染表中找到的文本值是有意义的。有时检查 rvest 实际可以检索的内容是个好主意,即将页面内容保存到文件并使用编辑器和/或浏览器仔细查看:r library(rvest) ASX_bhp &lt;-read_html("https://www2.asx.com.au/markets/company/bhp") tmp &lt;- tempfile("raw", fileext = ".html") message(tmp) write(as.character(ASX_bhp),tmp)
    • 嗯,它应该在之前的评论中读到“禁用该站点的 JS”。
    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 2017-05-27
    • 2020-07-18
    • 2019-02-17
    • 2017-06-26
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多