从R中的网站检索搜索结果的数据[关闭]

问题描述 投票:-1回答:2

我想知道我们是否可以使用R程序从特定网站检索搜索结果的数据。例如,在这种情况下,我想在以下链接中获得搜索结果时检索数据:

https://www.boerse-stuttgart.de/de/boersenportal/tools-und-services/handelstransparenz/kursblattarchiv/?tradedates=01.12.2017&wkn=EXS1&submit=Suche

r
2个回答
0
投票

如建议的那样,您可以使用rvest

library(rvest)

url <- "https://www.boerse-stuttgart.de/de/boersenportal/tools-und-services/handelstransparenz/kursblattarchiv/?tradedates=01.12.2017&wkn=EXS1&submit=Suche"
result <- url %>% 
  read_html() %>% 
  # The XPath of the table you are interested in
  html_nodes(xpath='//*[@id="Tools_SubModule_PriceHistory_479"]/div[2]/div[2]/div/table[2]') %>%
  html_table()

result <- result[[1]]

# Rename columns and remove first row
colnames(result) <- result[1, ]
result <- result[-c(1),]

head(result, 10)
   Zeitpunkt   Kurs Zusatz Umsatz Stück Umsatz in EUR
2   21:55:13 112,55      G         0,00          0,00
3   21:45:13 112,65      G         0,00          0,00
4   21:30:17 112,60      G         0,00          0,00
5   21:15:13 112,55      G         0,00          0,00
6   21:00:13 112,49      G         0,00          0,00
7   20:45:15 112,49      G         0,00          0,00
8   20:30:16 112,54      G         0,00          0,00
9   20:15:19 112,51      G         0,00          0,00
10  20:00:18 112,50      G         0,00          0,00
11  19:45:20 112,62      G         0,00          0,00

由于这些数字都被读作字符串,因此仍然需要做一些工作才能将它们正确地解析为数字:

options(digits=10)

# Remove all the dots in the numbers
result <- as.data.frame(apply(result, 2, function(y) gsub("\\.", "", y)))

# Substitute all the commas for dots for decimal places
result$Kurs <- gsub("(\\d+),(\\d)", "\\1.\\2", result$Kurs, perl = TRUE)
result$`Umsatz Stück` <- gsub("(\\d+),(\\d)", "\\1.\\2", result$`Umsatz Stück`, perl = TRUE)
result$`Umsatz in EUR` <- gsub("(\\d+),(\\d)", "\\1.\\2", result$`Umsatz in EUR`, perl = TRUE)


result$Kurs <- as.numeric(result$Kurs)
result$`Umsatz Stück` <- as.numeric(result$`Umsatz Stück`)
result$`Umsatz in EUR` <- as.numeric(result$`Umsatz in EUR`)

0
投票

作为@Jaime Caffarel答案的扩展,有许多页面不允许这种技术。要找出你应该看看地址:“https://www.boerse-stuttgart.de/robots.txt”。您还应该查看评论中所述的页面条款和条件。

这是我经常使用的一个小函数,它会自动查看是否禁止它然后提取函数。如果您要申请同一域的多个页面,您还应该留出合理的时间。

polite_scraping <- function(url) {
  require(rvest)
  require(robotstxt)

  if(paths_allowed(url)){
  p <-  url %>% 
      read_html() 

    Sys.sleep(10)

    return(p)
  } else {
    message(":( Not allowed!\n\n\n")
    p <- "NOT ALLOWED"
    return(p)
  }
}

刮痧时要礼貌!

© www.soinside.com 2019 - 2024. All rights reserved.