You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:15:26