【问题标题】:Scrape a page in R using rvest or RCurl or httr使用 rvest 或 RCurl 或 httr 在 R 中抓取页面
【发布时间】:2018-03-01 07:06:23
【问题描述】:

我想提取下面页面中的表格

https://www.mcxindia.com/market-data/spot-market-price

我尝试了 rvest 和 RCurl,但在这两种情况下,下载的页面与我在浏览器中看到的不同。我假设存在某种我无法检测或遵循的重定向形式

任何帮助将不胜感激

PS:对phantomjs不感兴趣

这是我到目前为止所尝试的:

1. HTTR

base_url <- "https://www.mcxindia.com/market-data/spot-market-price"
ua       <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
library(httr)
library(XML)
doc <- POST(base_url,user_agent(ua),set_cookies(`_ga` = "GA1.2.543290785.1505100652",`_gid`="GA1.2.1409943545.1505881384",`_gat`="1"))
doc <- htmlParse(doc)
poptable<-readHTMLTable(doc,which=7)

结果:未找到数据!!!!

2。 RCurl

library(RCurl)
curl <- getCurlHandle()
curlSetOpt(curl = curl,
           ssl.verifypeer = FALSE,
           useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
           timeout = 60,
           followlocation = TRUE,
           cookiejar = "./cookies",
           cookiefile = "./cookies")
newDoc = getURL("https://www.mcxindia.com/market-data/spot-market-price", curl=curl)
newDoc <- htmlParse(newDoc)
poptable<-readHTMLTable(newDoc,which=7)

结果:未找到数据!!!!

我也很想知道如何获取 excel 文件(见小 excel 图标)

【问题讨论】:

  • 您是否有理由明确排除 PhantomJS 作为解决方案?在某些情况下,如果没有 PhantomJS、RSelenium 或类似的东西,根本不可能抓取数据。不调查它可能无法解决您的问题
  • @TomS 这是我们环境中不允许使用 phantomJS 的系统要求。可以使用 rvest。完成代码后,我将发布答案。我很接近....
  • 但是你知道与例如相反RSelenium PhantomJS 不需要任何类型的安装,对吗?我的工作机器也没有管理员权限,但它可以工作。但是 - 如果您接近仅使用 rvest(或例如 httr)的解决方案,我很乐意阅读和学习,因为我在这方面基本上缺乏知识:)。

标签: rvest rcurl httr


【解决方案1】:

这就是答案

library(rvest)
library(stringi)
library(V8)

  ctx <- v8()
  pg <- read_html("https://www.mcxindia.com/market-data/spot-market-price")
  html_nodes(pg, xpath=".//script[contains(., 'Data')]")[[1]] %>% 
    html_text() %>% stri_unescape_unicode() %>% stri_replace_all_fixed('\\\\', '')%>% 
    ctx$eval() -> ignore_the_blank_return_value
  data <- ctx$get("vSMP")$Data[,c("Symbol","TodaysSpotPrice","Unit")]

享受!!!

【讨论】:

  • 真的很酷!刚开始抓取,已经遇到了一些 Java 问题,我必须在没有例如的情况下解决。硒。不过,从来没有遇到过 V8 包,但结果看起来非常好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多