一、核心技术栈与前期准备
1. 核心技术工具说明
本次自动化选股项目依赖 Python 的三大核心库,各自承担关键职责:
- Requests:轻量高效的 HTTP 请求库,负责向金融数据网站发送请求,获取公开的个股行情与财务数据,是爬虫实现的核心工具。
- BeautifulSoup4:强大的网页解析库,能够将 Requests 获取的杂乱 HTML 页面解析为结构化数据,方便提取我们需要的股票代码、营收、净利润等核心信息。
- Pandas:高性能的数据处理与分析库,负责对提取的金融数据进行清洗、整理、指标计算与筛选,是实现选股逻辑的关键支撑。
2. 前期环境搭建
其中 lxml 是 BeautifulSoup4 的高效解析器,能够提升网页解析速度,建议一并安装。
同时需要说明:本文选取公开的股票数据作为抓取来源(公开非付费数据),仅用于技术学习与研究,不构成任何投资建议。金融数据具有实时性与波动性,实际投资中需结合更多专业信息进行判断。
二、项目实现流程概述
本次 Python 自动化选股的核心流程分为四步:
- 爬虫搭建:抓取 A 股市场个股的基础信息(股票代码、名称)与核心财务 / 行情数据(每股收益、净利润增长率、市盈率、市净率等);
- 数据清洗:处理抓取到的缺失值、异常值、格式错误等问题,形成标准化数据集;
- 选股逻辑实现:基于价值投资与成长投资的核心指标,预设筛选规则,利用 Pandas 完成自动化筛选;
- 结果输出:将筛选出的潜力股整理为表格,保存为本地文件方便查阅。
三、完整代码实现与分步解析
步骤 1:导入所需库
首先导入项目依赖的所有 Python 库,并进行基础配置(如请求头设置,避免被网站反爬拦截)。
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 配置请求头,模拟浏览器访问,避免被网站反爬
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
步骤 2:抓取股票基础数据与核心指标
本次我们抓取某财经网站的 A 股列表数据,提取核心选股指标。为了保证代码可运行性,我们先抓取个股列表页面,再批量提取关键数据(注:因网站反爬机制限制,本文采用简化版抓取逻辑,避免高频请求触发拦截)。
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 配置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
def get_stock_data():
"""
抓取 A 股个股核心数据,返回结构化列表
"""
proxies = {}
url =
:
response = requests.get(url, headers=headers, proxies=proxies, timeout=)
response.raise_for_status()
response.encoding =
soup = BeautifulSoup(response.text, )
stock_list = []
stock_items = soup.find_all(, class_=)
item stock_items[:]:
:
stock_code = item.find().get(, )
stock_name = item.find().get_text(strip=).split()[]
detail_url =
detail_response = requests.get(detail_url, headers=headers, proxies=proxies, timeout=)
detail_response.encoding =
detail_soup = BeautifulSoup(detail_response.text, )
eps = detail_soup.find(, class_=).get_text(strip=, default=)
profit_growth = detail_soup.find(, class_=).get_text(strip=, default=)
pe = detail_soup.find(, class_=).get_text(strip=, default=)
pb = detail_soup.find(, class_=).get_text(strip=, default=)
stock_info = {
: stock_code,
: stock_name,
: (eps.replace(, ).replace(, )),
: (profit_growth.replace(, ).replace(, )),
: (pe.replace(, ).replace(, )),
: (pb.replace(, ).replace(, ))
}
stock_list.append(stock_info)
Exception e:
stock_list
Exception e:
()
[]

