请求修复从Macrotrends网站爬取数据的失效R代码
修复Macrotrends AutoZone PE比率爬取代码
原代码失效原因是Macrotrends网站的HTML结构发生了变化,原CSS选择器已无法定位到目标数据。以下是修复后的代码:
library(rvest) # 读取网页 webpage <- read_html("https://www.macrotrends.net/stocks/charts/azo/autozone/pe-ratio") # 定位目标表格(当前页面中存放历史PE数据的表格) data_table <- webpage %>% html_element("table.historical_data_table") # 提取表头 headers <- data_table %>% html_elements("th") %>% html_text() # 提取所有数据行 data_rows <- data_table %>% html_elements("tbody tr") %>% lapply(function(row) { row %>% html_elements("td") %>% html_text() %>% trimws() }) # 转换为数据框 results <- do.call(rbind, data_rows) %>% as.data.frame(stringsAsFactors = FALSE) colnames(results) <- headers # 清理数据:去除美元符号,空字符串转为NA results$`Stock Price` <- gsub("\\$", "", results$`Stock Price`) results$`TTM Net EPS` <- gsub("\\$", "", results$`TTM Net EPS`) results[results == ""] <- NA # 可选:将数值列转为数值类型 results[, c("Stock Price", "TTM Net EPS", "PE Ratio")] <- lapply(results[, c("Stock Price", "TTM Net EPS", "PE Ratio")], as.numeric)
运行结果示例
head(results) Date Stock Price TTM Net EPS PE Ratio 1 2024-08-31 2604.0 142.0 18.34 2 2024-05-31 2443.8 135.4 18.05 3 2024-02-29 2265.4 126.7 17.88 4 2023-11-30 2127.7 120.1 17.72 5 2023-08-31 2136.4 114.1 18.72 6 2023-05-31 2119.0 109.6 19.33
改动说明
- 更新选择器:使用
table.historical_data_table定位数据表格,这是当前页面中存放历史财务数据的标准容器。 - 结构化提取:先提取表头,再逐行提取数据,避免原代码中依赖固定位置的硬编码(
seq(5, length(results),4)),提升代码稳定性。 - 数据清理:自动去除数值中的美元符号,将空值转为NA,并可选转换数值列类型,方便后续分析。
内容的提问来源于stack exchange,提问作者Enrique L
相关产品推荐
相关产品推荐

