我想知道我们是否可以使用R程序从特定网站检索搜索结果的数据。例如,在这种情况下,我想在以下链接中获得搜索结果时检索数据:
如建议的那样,您可以使用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`)
作为@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)
}
}
刮痧时要礼貌!