【问题标题】:Scraping with rvest and converting html output into data frame使用 rvest 抓取并将 html 输出转换为数据框
【发布时间】:2019-05-31 20:54:14
【问题描述】:

当在 R 中抓取 Bombay Stock Exchange 网站以获取财务结果时,我得到了 html 代码。

read_html("https://api.bseindia.com/BseIndiaAPI/api/TabResults/w?scripcode=500470&tabtype=RESULTS") %>% 
    html_text()

但是我得到如下输出:

[1] "\"{\\\"col1\\\":\\\"(in Cr.)\\\",\\\"col2\\\":\\\"Sep-18\\\",\\\"col3\\\":\\\"Jun-18\\\",\\\"col4\\\":\\\"FY17-18\\\",\\\"resultinCr\\\":[{\\\"title\\\":\\\"Revenue\\\",\\\"v1\\\":\\\"17,902.04\\\",\\\"v2\\\":\\\"16,405.46\\\",\\\"v3\\\":\\\"60,519.37\\\"},....

我应该如何将这些数据提取到数据框中?

我尝试使用gsub 从文本输出中提取数字和字符。但是反斜杠字符使它变得困难。 表格格式应该是这样的:

【问题讨论】:

  • API 返回的是 JSON,而不是 HTML,如果您在 Web 浏览器中打开它,您可以看到它。如果您使用jsonlite::fromJSON 而不是read_html,由于某种原因,您会得到一个JSON 字符串而不是解析结果,因此您需要重新解析:x <- jsonlite::fromJSON(jsonlite::fromJSON('https://api.bseindia.com/BseIndiaAPI/api/TabResults/w?scripcode=500470&tabtype=RESULTS')) ...这有点傻,但有效。如果付出的努力足够重要,那么肯定有一个更优雅的解决方案。
  • 超顺滑.. 非常感谢

标签: r web-scraping html-parsing rvest


【解决方案1】:
url<-"https://api.bseindia.com/BseIndiaAPI/api/TabResults/w?scripcode=500470&tabtype=RESULTS"
library(rvest)
page<-html_session(url)
json<-readBin(page$response$content, what="json")

library(jsonlite)
df<-fromJSON(json)
df<-fromJSON(df)

#Result in CR
df$resultinCr

#result in Million
df$resultinM

结果为 JSON 格式。使用 JSONLITE 包解析 JSON。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多