如何用R从FinViz抓取股票代码及自定义关键指标并导出文件?
嘿,作为爬虫新手,用R搞定FinViz的股票数据抓取其实没那么复杂!我来一步步带你实现——从抓取所有股票代码和自定义指标,到最终导出成CSV/XLS文件,全流程给你捋清楚~
第一步:准备必要的R包
首先得装上几个核心工具包,都是R处理网页数据和表格的常用款:
rvest:用来解析网页HTML,提取表格数据dplyr:方便快速筛选、整理数据readr:导出CSV文件更高效openxlsx(可选):如果要导出XLS/XLSX格式的话需要它
安装和加载的代码如下:
# 安装包(第一次运行需要) install.packages(c("rvest", "dplyr", "readr", "openxlsx")) # 加载包 library(rvest) library(dplyr) library(readr) library(openxlsx) # 如果需要导出Excel的话加载
第二步:理解FinViz的页面结构
FinViz的股票筛选页面(比如「All Stocks」视图)是用HTML表格来展示数据的,我们要做的就是定位这个表格,把里面的数据抓下来。默认的「All Stocks」视图已经包含了很多基础指标,你可以根据自己的需求调整筛选条件,或者后续在数据里挑需要的列。
第三步:编写抓取代码
接下来就是核心的抓取逻辑了,我会把每一步都写清楚:
# 1. 定义目标页面URL(这里是FinViz的全股票列表视图,v=111对应基础表格) finviz_url <- "https://finviz.com/screener.ashx?v=111" # 2. 抓取页面内容 page <- read_html(finviz_url) # 3. 提取页面中的表格数据 # FinViz的主表格通常是页面里的第一个大表格,用html_table提取 stock_data <- page %>% html_table(fill = TRUE) %>% # fill=TRUE处理单元格合并的情况 .[[1]] # 取第一个表格(因为页面可能有多个小表格) # 4. 筛选你需要的自定义指标 # 比如我要保留股票代码(Ticker)、公司名称(Company)、行业(Sector)、价格(Price)、市盈率(P/E)这些列 custom_data <- stock_data %>% select(Ticker, Company, Sector, Price, `P/E`) # 注意带特殊字符的列名要用反引号包裹 # 5. 简单清理数据(比如去掉表头重复的行,FinViz表格有时候会有重复表头) custom_data <- custom_data %>% filter(Ticker != "Ticker") # 去掉和表头一样的行
第四步:导出数据到CSV或XLS
现在数据已经整理好了,直接导出就行:
导出为CSV文件
write_csv(custom_data, "finviz_stocks.csv") # 你可以修改文件名和保存路径,比如改成"~/Documents/finviz_stocks.csv"
导出为XLSX文件(需要openxlsx包)
write.xlsx(custom_data, "finviz_stocks.xlsx", rowNames = FALSE) # rowNames=FALSE避免把行号也导出到Excel里
一些重要的注意事项
- 不要频繁刷新请求!FinViz会检测异常流量,可能封你的IP。如果要批量抓取多页数据(比如股票太多分页了),记得加
Sys.sleep(2)之类的延迟,每次请求间隔2-3秒。 - FinViz的页面结构可能会更新,如果哪天代码突然抓不到数据了,记得检查一下页面的表格结构有没有变化,调整
html_table的参数或者选择器。 - 遵守网站的
robots.txt规则,不要抓取禁止爬取的内容,做个合规的爬虫~
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

