免费获取股票历史数据的3种方法:从Excel到Python爬虫全攻略

# 免费获取股票历史数据的实战手册:从零基础到自动化采集 最近几年,身边对金融市场感兴趣的朋友越来越多,无论是想自己做些简单的回测,还是想验证某个投资想法,第一步总是绕不开“数据”。我刚开始接触量化分析时,也在这个环节卡了很久——网上信息看似很多,但要么收费昂贵,要么数据质量堪忧,要么就是操作步骤繁琐得让人望而却步。对于大多数个人研究者和数据分析爱好者来说,找到一个稳定、免费且易于获取的股票历史数据源,确实是个不大不小的门槛。 这篇文章,我想结合自己这几年的摸索和实际项目经验,为你梳理出一条清晰的路径。我们不会只讲一种方法,而是会覆盖从完全不懂代码的“鼠标流”用户,到习惯用Excel处理数据的中级用户,再到希望实现自动化采集的开发者。每种方法都有其最适合的场景和人群,关键在于找到与你当前技能和需求最匹配的那一个。数据是分析的基石,而获取数据的过程本身,也不应成为阻碍你探索的绊脚石。 ## 1. 零代码方案:利用现成工具与平台 对于没有任何编程背景,或者只是偶尔需要查看、下载某只股票历史行情的朋友来说,学习编程的成本显然过高。这个阶段,我们的核心诉求是:**简单、直观、快速拿到数据**。幸运的是,市面上确实存在一些设计良好的免费工具和平台,能够满足这个需求。 我最早使用的一个途径,是通过一些财经数据服务商的公开接口或导出功能。很多大型的金融信息网站,为了吸引用户,会提供基础历史数据的CSV或Excel导出。虽然通常有单次导出数据量(比如最多500条)或频率的限制,但对于非高频的复盘和分析来说,已经足够。 **操作流程通常如下:** 1. 访问目标财经数据网站(例如一些国际知名的免费金融数据门户)。 2. 在搜索框输入股票代码或名称。 3. 进入该股票的历史行情页面。 4. 找到“下载数据”或“导出”按钮(通常以`CSV`、`Excel`或下载图标表示)。 5. 选择需要的数据时间范围(如“过去5年”、“全部历史”)和周期(日线、周线、月线)。 6. 点击下载,数据文件会自动保存到本地。 > 注意:使用这类服务时,务必留意其服务条款。大部分免费服务禁止将数据用于商业用途或大规模自动化抓取。同时,数据的更新频率和准确性也需要在使用前进行交叉验证。 除了直接访问网站,另一种更“懒人”但有时更稳定的方法,是借助一些数据聚合工具或插件。例如,某些浏览器插件或桌面小工具,可以帮你把网页上的数据表格“刮”下来,保存为结构化的文件。这类工具的好处是避免了重复的点击操作,但设置起来可能需要一点学习成本。 为了让你更清晰地对比几种常见零代码工具的优缺点,我整理了一个简单的表格: | 工具/平台类型 | 典型代表 | 优点 | 缺点 | 适用场景 | | :--- | :--- | :--- | :--- | :--- | | **财经网站导出** | Yahoo Finance (历史版块)、 Investing.com | 数据全面、免费、无需注册(部分) | 有下载限制,界面可能变动,数据格式不统一 | 偶尔下载单只股票长期历史数据 | | **数据服务API(带GUI)** | 部分国内券商APP的数据中心 | 数据相对规范、稳定 | 通常需要开户,有使用额度限制 | 已开户用户进行简单数据导出 | | **浏览器抓取插件** | Web Scraper、 Data Miner | 可自定义抓取规则,灵活性高 | 需要学习插件使用,对动态网页支持有限 | 从固定格式页面定期抓取少量数据 | 选择哪种方式,取决于你的使用频率和对数据稳定性的要求。如果只是偶尔为之,直接使用财经网站的导出功能是最快的。如果你需要定期从某个固定页面获取数据,那么花半小时学习一个抓取插件,长远来看可能更省力。 ## 2. Excel进阶:连接外部数据与Power Query 当你已经不再满足于一次性的手动下载,或者需要处理多只股票、多个时间段的数据时,Excel内置的“获取和转换数据”功能(在较新版本中称为Power Query)就能大显身手了。它本质上是一个可视化的ETL(提取、转换、加载)工具,允许你建立可刷新的数据连接。 想象一下这个场景:你需要跟踪一个包含20只股票的自选组合,每天收盘后更新它们的收盘价到Excel中,用于计算组合净值。手动去20个页面下载再复制粘贴,显然不现实。而用Power Query,你可以建立一个“数据管道”,一键刷新所有数据。 **让我们以从某个提供CSV下载链接的公开数据源为例,看看如何操作:** 1. **新建查询**:在Excel中,点击“数据”选项卡,选择“获取数据” -> “自其他源” -> “自Web”。(注意:此处的“自Web”功能是Excel内置的网页连接器,其使用需遵守目标网站规则,且功能有限,仅适用于结构清晰的表格数据)。 2. **输入URL**:在弹出的对话框中,输入目标数据页面的URL。有些数据源会提供直接的CSV文件链接,这种是最理想的。 3. **导航与选择数据**:Excel会尝试预览网页内容。你需要在导航器中选择包含所需数据的表格。 4. **数据转换**:进入Power Query编辑器后,你可以进行一系列清洗操作:删除不必要的列、重命名列标题、更改数据类型(确保数字是数字,日期是日期)、过滤错误值等。 5. **加载数据**:点击“关闭并上载”,处理好的数据就会以表格形式载入当前工作表。 关键在于,这个查询可以被保存。明天你需要更新数据时,只需右键点击数据区域,选择“刷新”,Excel就会自动重新访问那个URL,抓取最新数据并应用同样的清洗步骤,实现半自动化更新。 ```excel // 这是一个Power Query M语言的高级函数示例,用于动态构建多个股票的查询 // 假设我们有一个股票代码列表在Excel的Sheet1的A列 let // 从Excel表获取股票代码列表 Source = Excel.CurrentWorkbook(){[Name="StockList"]}[Content], StockCodes = Table.TransformColumnTypes(Source,{{"代码", type text}}), // 定义一个函数,根据股票代码生成查询 GetStockData = (code as text) as table => let // 动态拼接数据源URL,此处仅为示例,实际URL需替换 BaseUrl = "https://api.example.com/history?symbol=", FullUrl = BaseUrl & code, // 从Web获取JSON数据(假设数据源返回JSON) Source = Json.Document(Web.Contents(FullUrl)), // 将JSON转换为表格 #"Converted to Table" = Table.FromRecords(Source[history]) in #"Converted to Table", // 对列表中的每个代码调用函数,并添加一列标识股票代码 Custom1 = Table.AddColumn(StockCodes, "自定义", each GetStockData([代码])), #"展开的“自定义”" = Table.ExpandTableColumn(Custom1, "自定义", {"date", "open", "high", "low", "close", "volume"}, {"date", "open", "high", "low", "close", "volume"}) in #"展开的“自定义”" ``` > 提示:使用Web.Contents函数直接访问API或网页时,务必谨慎。频繁请求可能触发目标服务器的反爬机制。对于个人非商业用途的轻度使用,通常问题不大,但建议在查询中添加适当的延迟设置,并尊重`robots.txt`协议。 通过Power Query,你甚至可以将多个数据源(比如不同股票的历史数据、宏观经济指标)合并到一起,创建属于你自己的分析数据库。它填补了完全手动操作和全编程自动化之间的空白,是数据分析师和金融从业者必须掌握的技能之一。 ## 3. Python爬虫入门:定向抓取与解析 当你需要的数据量更大、频率更高,或者数据源没有提供方便的导出功能时,编程自动化就成了唯一高效的选择。Python因其丰富的库和简洁的语法,成为数据抓取领域的首选语言。别被“爬虫”这个词吓到,基础的网页数据抓取,其核心逻辑就像是用程序模拟一个非常执着且手速极快的用户。 整个过程可以分解为三个核心步骤:**请求网页、解析内容、保存数据**。我们用一个经典的库组合`requests` + `BeautifulSoup`来演示。假设我们要从一个静态结构的历史行情页面抓取数据。 首先,你需要安装必要的库。打开命令行(CMD或Terminal),输入: ```bash pip install requests beautifulsoup4 pandas ``` 接下来,我们来看一段实际的代码。假设目标页面是一个表格,包含了日期、开盘价、最高价、最低价、收盘价和成交量。 ```python import requests from bs4 import BeautifulSoup import pandas as pd from datetime import datetime import time # 用于添加请求间隔 # 1. 请求网页 url = 'https://example.com/stock/AAPL/history' # 示例URL,请替换为实际地址 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' # 模拟浏览器访问 } try: response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() # 检查请求是否成功 except requests.exceptions.RequestException as e: print(f"请求失败: {e}") exit() # 2. 解析内容 soup = BeautifulSoup(response.content, 'html.parser') # 假设数据在一个id为‘historical-data’的表格中 data_table = soup.find('table', {'id': 'historical-data'}) if not data_table: print("未找到数据表格,页面结构可能已更改。") exit() rows = data_table.find_all('tr')[1:] # 跳过表头行 stock_data = [] for row in rows: cols = row.find_all('td') if len(cols) >= 6: # 确保有足够的数据列 date_str = cols[0].text.strip() # 解析日期,格式需根据实际情况调整 try: date = datetime.strptime(date_str, '%b %d, %Y').strftime('%Y-%m-%d') except ValueError: date = date_str # 如果解析失败,保留原字符串 open_price = cols[1].text.strip().replace(',', '') high_price = cols[2].text.strip().replace(',', '') low_price = cols[3].text.strip().replace(',', '') close_price = cols[4].text.strip().replace(',', '') volume = cols[5].text.strip().replace(',', '') stock_data.append([date, open_price, high_price, low_price, close_price, volume]) # 3. 保存数据 if stock_data: df = pd.DataFrame(stock_data, columns=['Date', 'Open', 'High', 'Low', 'Close', 'Volume']) # 转换数据类型 df['Date'] = pd.to_datetime(df['Date'], errors='coerce') for col in ['Open', 'High', 'Low', 'Close']: df[col] = pd.to_numeric(df[col], errors='coerce') df['Volume'] = pd.to_numeric(df['Volume'], errors='coerce') # 保存到CSV文件 df.to_csv('apple_stock_history.csv', index=False, encoding='utf-8-sig') print(f"数据已成功保存至 apple_stock_history.csv,共 {len(df)} 条记录。") else: print("未提取到任何数据。") ``` 这段代码做了几件关键事情: - **设置请求头**:模拟真实浏览器访问,降低被简单反爬机制拦截的风险。 - **异常处理**:网络请求可能失败,代码需要能妥善处理这些情况。 - **精准定位**:使用`find`方法通过表格的`id`属性定位,这比依赖固定的行列索引更稳定。 - **数据清洗**:移除数字中的千位分隔符(逗号),并将字符串转换为数值和日期类型。 - **结构化存储**:使用`pandas`的`DataFrame`,最终导出为通用的CSV格式。 **在实际操作中,你肯定会遇到各种问题,以下是几个常见的坑和应对策略:** - **页面是动态加载的**:你用`requests`拿到的是初始HTML,可能看不到数据。这时需要分析网页的网络请求(F12打开开发者工具,查看XHR或Fetch请求),找到直接返回数据的API接口,然后用`requests`去调用那个接口(通常返回JSON)。 - **遇到反爬措施**:除了设置`User-Agent`,可能还需要处理Cookies、添加Referer头,或者在频繁请求时使用`time.sleep()`添加随机延迟。过于激进的抓取行为可能导致IP被暂时封禁。 - **页面结构频繁变动**:这是维护爬虫最头疼的地方。尽量使用具有唯一性的HTML属性(如`id`、`data-*`属性)来定位元素,而不是依赖于复杂的CSS选择器路径。写一些简单的日志或检查点,当抓取失败时能快速发现问题。 ## 4. 使用专业金融数据API 对于追求数据质量、稳定性和开发效率的严肃项目或个人,使用专业的金融数据API是更值得投资的方案。这里的“专业”并非一定指昂贵,许多平台提供了非常慷慨的免费额度,足以支撑个人学习和中小型项目。 与爬虫相比,API的优势是压倒性的: - **数据标准化**:字段定义清晰,格式统一(通常是JSON),无需复杂的解析和清洗。 - **稳定可靠**:服务提供商保证API的可用性,数据结构不会随意变动。 - **功能丰富**:除了历史行情,通常还提供实时数据、财务指标、公司基本信息、新闻情绪等。 - **法律合规**:在服务条款允许的范围内使用,避免了潜在的法律风险。 目前市场上有不少提供免费层级的金融数据API,例如Alpha Vantage、IEX Cloud、Twelve Data等。它们通常通过API Key进行身份验证,并有明确的调用频率限制(如每分钟5次,每天500次等)。 下面以获取某只股票日线历史数据为例,展示一个典型的API调用流程: ```python import requests import pandas as pd # 你的API密钥,需要在对应平台注册获取 API_KEY = 'YOUR_DEMO_API_KEY_HERE' SYMBOL = 'AAPL' # 股票代码 FUNCTION = 'TIME_SERIES_DAILY' # 函数,表示获取日线数据 OUTPUTSIZE = 'compact' # ‘compact’返回最近100条,‘full’返回全部历史 url = f'https://www.alphavantage.co/query?function={FUNCTION}&symbol={SYMBOL}&apikey={API_KEY}&outputsize={OUTPUTSIZE}&datatype=json' try: response = requests.get(url) data = response.json() # 检查API返回是否包含错误信息 if 'Error Message' in data: print(f"API错误: {data['Error Message']}") elif 'Note' in data: # 免费API常有调用频率提示 print(f"提示: {data['Note']}") else: # 提取时间序列数据 time_series = data.get('Time Series (Daily)', {}) # 转换为pandas DataFrame df = pd.DataFrame.from_dict(time_series, orient='index') df.index = pd.to_datetime(df.index) # 将索引转换为日期时间类型 df = df.rename(columns={ '1. open': 'Open', '2. high': 'High', '3. low': 'Low', '4. close': 'Close', '5. volume': 'Volume' }) # 转换数据类型 df = df.apply(pd.to_numeric) df = df.sort_index() # 按日期排序 print(f"成功获取 {SYMBOL} 共 {len(df)} 个交易日数据。") print(df.head()) # 预览前几行 # 保存到CSV df.to_csv(f'{SYMBOL}_daily.csv') except requests.exceptions.RequestException as e: print(f"网络请求失败: {e}") except ValueError as e: print(f"解析JSON失败: {e}") ``` 使用API时,管理好你的API Key和调用频率至关重要。对于免费套餐,合理规划请求,避免短时间内集中调用。对于需要批量获取多只股票数据的情况,可以将请求队列化,并加入延时。 **在选择API时,你可以从以下几个维度评估:** - **免费额度**:每日/每月调用次数、历史数据长度、支持的市场范围。 - **数据质量**:数据是否经过调整(复权)、更新频率、错误率。 - **延迟**:实时数据的延迟情况(对于免费套餐,15分钟延迟很常见)。 - **文档与社区**:API文档是否清晰,是否有活跃的社区或技术支持。 - **扩展性**:如果需要升级到付费套餐,价格是否合理。 从我个人的项目经验来看,在初期探索和小型原型阶段,免费API完全够用。它能让你把精力集中在数据分析和策略开发上,而不是耗费大量时间与不稳定的网页结构做斗争。当项目规模扩大,对数据实时性、深度和广度有更高要求时,再考虑付费方案也不迟。 ## 5. 数据质量校验与本地化管理 无论通过哪种方式获取数据,到手后的第一步都不应该是直接投入分析,而是进行**数据质量校验**。这一步常常被新手忽略,却直接决定了后续所有分析的可靠性。原始数据中可能隐藏着各种问题:缺失值、异常值(比如价格突然为0或极大)、格式错误(日期格式混乱)、重复记录等。 一个简单的校验流程可以包括: - **完整性检查**:检查是否有整行或整列数据缺失。对于时间序列,检查日期是否连续,是否存在非交易日的错误数据。 - **范围校验**:股价、成交量是否在合理范围内?例如,一只普通股票的价格不应为负,单日振幅通常也有一定限度。 - **逻辑校验**:当日最高价是否大于等于开盘价和收盘价?最低价是否小于等于它们? - **一致性检查**:如果从多个来源获取了同一只股票的数据,进行交叉比对,看关键数据点是否一致。 在Python中,`pandas`提供了强大的工具来进行这些检查: ```python import pandas as pd import numpy as np # 假设df是我们之前获取的股票DataFrame print("数据概览:") print(df.info()) print("\n描述性统计:") print(df.describe()) # 检查缺失值 print(f"\n缺失值统计:") print(df.isnull().sum()) # 检查异常值(例如,收盘价为0或负值) abnormal_close = df[df['Close'] <= 0] if not abnormal_close.empty: print(f"\n发现异常收盘价记录 {len(abnormal_close)} 条:") print(abnormal_close) # 检查价格逻辑:High >= Low, High >= Open, High >= Close, Low <= Open, Low <= Close logic_errors = df[(df['High'] < df['Low']) | (df['High'] < df['Open']) | (df['High'] < df['Close']) | (df['Low'] > df['Open']) | (df['Low'] > df['Close'])] if not logic_errors.empty: print(f"\n发现价格逻辑错误记录 {len(logic_errors)} 条:") print(logic_errors) # 处理缺失值(示例:用前一个交易日的值填充) df_cleaned = df.fillna(method='ffill') # 前向填充 # 或者删除缺失行 # df_cleaned = df.dropna() print("\n数据清洗完成。") ``` 校验并清洗完数据后,下一步是思考如何**有效地本地化管理**这些历史数据。如果只是散乱地存放一堆CSV文件,随着股票数量和时间跨度的增加,查找和使用会变得非常低效。 一个推荐的做法是使用轻量级数据库,例如**SQLite**。它无需安装服务器,单个文件就是一个数据库,非常适合个人项目管理。你可以将多只股票、多个时间段的数据规整地存入一张表中,然后通过SQL语句进行灵活的查询和聚合。 ```python import sqlite3 from datetime import datetime # 连接到SQLite数据库(如果不存在则会创建) conn = sqlite3.connect('stock_data.db') cursor = conn.cursor() # 创建数据表 create_table_sql = ''' CREATE TABLE IF NOT EXISTS daily_bars ( id INTEGER PRIMARY KEY AUTOINCREMENT, symbol TEXT NOT NULL, date DATE NOT NULL, open REAL, high REAL, low REAL, close REAL, volume INTEGER, UNIQUE(symbol, date) -- 防止同一只股票同一日期的数据重复插入 ) ''' cursor.execute(create_table_sql) # 假设我们有一个包含多只股票数据的DataFrame `df_all`,包含'symbol'列 # 将DataFrame写入数据库 df_cleaned.to_sql('daily_bars', conn, if_exists='append', index=False) # 查询示例:获取某只股票2023年的所有数据 query_sql = ''' SELECT date, open, high, low, close, volume FROM daily_bars WHERE symbol = ? AND date BETWEEN ? AND ? ORDER BY date ''' symbol = 'AAPL' start_date = '2023-01-01' end_date = '2023-12-31' cursor.execute(query_sql, (symbol, start_date, end_date)) results = cursor.fetchall() # 将查询结果转回DataFrame df_query = pd.DataFrame(results, columns=['Date', 'Open', 'High', 'Low', 'Close', 'Volume']) print(df_query.head()) conn.close() # 关闭连接 ``` 建立这样一个本地数据仓库后,你的数据分析工作流将变得清晰且高效。新的数据可以定期通过爬虫或API脚本获取,经过校验清洗后增量更新到数据库。分析时,直接从数据库按需查询,无需再面对杂乱的文件。这套方法在我自己的几个长期跟踪项目中运行良好,它让数据维护变成了一个后台自动化过程,而我可以更专注于策略本身。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

获取东方财富股票的详细信息(python爬虫)

获取东方财富股票的详细信息(python爬虫)

获取东方财富股票的详细信息(python爬虫)

python股票爬虫

python股票爬虫

用python requests实现的股票信息抓取,包括当日实时数据和历史数据

python爬虫爬取股票评论,调用百度AI进行语义分析, matlab数据处理,股票涨跌和评论的关系

python爬虫爬取股票评论,调用百度AI进行语义分析, matlab数据处理,股票涨跌和评论的关系

python爬虫爬取股票评论, 调用百度AI进行语义分析, matlab数据处理, excel作图 股票涨跌和评论的关系

Python-TuShare是爬取中国股票历史数据的工具

Python-TuShare是爬取中国股票历史数据的工具

TuShare是实现对股票/期货等金融数据从**数据采集**、**清洗加工** 到 **数据存储**过程的工具

Python股票数据爬虫+分析+可视化框架.zip

Python股票数据爬虫+分析+可视化框架.zip

Python股票数据爬虫+分析+可视化框架.zip

Python项目开发实战_网络爬虫批量采集股票数据保存到Excel中_编程案例实例课程教程.pdf

Python项目开发实战_网络爬虫批量采集股票数据保存到Excel中_编程案例实例课程教程.pdf

本章将通过具体的案例,让读者掌握 Python 在爬虫项目中的应用。通过本章的学习,读者可以掌握分析网页的技巧、Python 编写网络程序的方法、Excel 的操作,以及正则表达式的使用。这些都是爬虫项目中必备的知识和技能。通过编写爬虫,将指定日期时段内的全部上市公司股票数据爬取下来,并按照股票代码保存到相应的 Excel 文件中。 这个案例主要分为两大步骤: (1)要知道上市公司有哪些; (2)根据每一个上市公司的股票编号爬取数据。 由于两部分代码相对比较独立,可以做成两个代码文件。一个文件用来爬取股票代码,另一个文件用来爬取股票内容。

东方财富股票评论数据 Python爬虫代码Scrapy框架

东方财富股票评论数据 Python爬虫代码Scrapy框架

批量爬取股票评论文本数据,包含大量的情感数据,以共分析

python3 获取股票信息并画K线图显示 源代码 .py文件

python3 获取股票信息并画K线图显示 源代码 .py文件

python3 爬虫获取网易财经股票信息并将股票历史交易记录以K线图的形式展现,能自选股票。

Python3对股票数据进行分析源代码和股票数据集

Python3对股票数据进行分析源代码和股票数据集

1、内容概要:本资源主要包括Python3对股票数据进行分析源代码、Python3对股票的收益和风险分析源代码、Python3对多股票的投资组合进行分析源代码、北京某投资管理有限公司20支真实股票数据、20支股票整体绘图分析结果展示等。 2、本资源适用于对量化交易感兴趣的学生学习实验参考使用。 3、量化交易是以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。本资源仅供学习使用,不可作为真实场景模拟操作。 4、源代码主要包括:股票的开盘价、最高价、最低价、收盘价、成交量、市值、换手率、pe、pb等指标分析,绘制K线图、股票指标相关性分析、移动平均线、股票收益率分析、风险性衡量、投资组合等。

python股票量化系统

python股票量化系统

由python编写,支持python3.4+,有如下功能: 可视化(基于PyQT的界面) 多线程事件引擎 四大功能 股票数据 选股 策略回测 实盘交易 历史数据均免费来自于网络 Wind免费个人接口 TuShare 实盘微信提醒及交互 一键挂机 全自动交易 模拟交易,支持9个模拟账号 实盘和回测共用同一策略代码 实盘策略编写模板 选股策略编写模板 自动下载历史数据到MongoDB数据库 股票代码表 交易日数据 个股,指数和ETF历史日线数据 个股和ETF历史分笔数据 集成基本的统计功能 实盘单账户多策略

Python爬虫实现获取股票信息并保存到文件(亲测可运行)

Python爬虫实现获取股票信息并保存到文件(亲测可运行)

主要参考了北京理工大学嵩天老师的视频,因老师所讲的网址已做更改,将获取股票列表信息和股票价格的网站做了更改,用到了beautiful soup库,re库,requests库,traceback库,datetime库。 环境说明: Python:3.8(32bit) IDE:Pycharm OS:win10 访问网页数:996 运行时间:约600s 程序运行截图: 本地文件保存部分效果图: 股票列表网页源码: 包钢股份(600010) 网页信息源码: 昨 收:1145.00 今 开:1139.03 最 高:1147.96 最 低:1131.98 成交量:27618手 成交额:

《Python网络爬虫与信息提取》第三周 网络爬虫之实战 学习笔记(三)“股票数据定向爬虫”实例

《Python网络爬虫与信息提取》第三周 网络爬虫之实战 学习笔记(三)“股票数据定向爬虫”实例

目录 三、“股票数据定向爬虫”实例 1、“股票数据定向爬虫”实例介绍 (1)功能描述 (2)候选数据网站的选择 (3)程序的结构设计 2、“股票数据定向爬虫”实例编写 3、“股票数据定向爬虫”实例优化 (1)速度提高:编码识别的优化 (2)体验提高:增加动态进度显示 三、“股票数据定向爬虫”实例 1、“股票数据定向爬虫”实例介绍 (1)功能描述 目标:获取上交所和深交所所有股票的名称和交易信息。 输出:保存到文件中。 技术路线:requests­-bs4-­re。 (2)候选数据网站的选择 ①新浪股票:http://finance.sina.com.cn/stock/。 ②百度股票:https

python 实现股票分时图K线图及抓取免费level2行情

python 实现股票分时图K线图及抓取免费level2行情

python 实现股票分时图K线图及抓取免费level2行情

Python爬取股票数据存入mysql,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅)支持多线程+数据库连接池

Python爬取股票数据存入mysql,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅)支持多线程+数据库连接池

运行说明 首先要保证本机已经安装MySQL和Redis. 爬虫部分 采用单线程Python爬虫 + MySQL. 主要文件在./PythonCrawler中 1、运行文件databaseInitialization.py初始化数据库和相应的表, 数据库连接默认是localhost:3306 2、运行文件findAllStocksCode.py获得所有4192支股票的股票代码和名称, 这时会得到StockCodes.txt文件 3、修改insertRecords.py等以"insertRecords"开头的文件中的股票信息路径, 开启定时爬虫crontab -e, 如果对每次执行的时间没有限制 单线程爬虫`insertRecords.py`的参考时间为406秒 多进程爬虫`insertRecordsMultiProcesses.py` 的参考时间为150秒 多线程爬虫`insertRecordsMultiThread.py`的参考时间为146秒 多线程+数据库连接池爬虫`insertRecordsMultiThreadConnectionPool.

Python3网络爬虫基础+实战案例 Scrapy、Flask、PySpider、Tushare

Python3网络爬虫基础+实战案例 Scrapy、Flask、PySpider、Tushare

环境配置 Python3+Pip环境配置 MongoDB环境配置 Redis环境配置 MySQL的安装 Python多版本共存配置 Python爬虫常用库的安装 基础篇 爬虫基本原理讲解 Urllib库基本使用 Requests库基本使用 正则表达式基础 BeautifulSoup库详解 PyQuery详解 Selenium详解 实战篇 Requests+正则表达式爬取猫眼电影 分析Ajax请求并抓取今日头条街拍美图 使用Selenium模拟浏览器抓取淘宝商品美食信息 使用Redis+Flask维护动态代理池 使用代理处理反爬抓取微信文章 使用Redis+Flask维护动态Cookies池 框架篇 PySpider框架基本使用及抓取TripAdvisor实战 PySpider架构概述及用法详解 Scrapy框架安装 Scrapy框架基本使用 Scrapy命令行详解 Scrapy中选择器用法 Scrapy中Spiders用法 Scrapy中Item Pipeline的用法 Scrapy中Download Middleware的用法 Scrapy爬取知乎用户信息实战 Scrapy+Cookies池抓取新浪微博 Scrapy+Tushare爬取微博股票数据 分布式篇 Scrapy分布式原理及Scrapy-Redis源码解析 Scrapy分布式架构搭建抓取知乎 Scrapy分布式的部署详解

Python爬取股票信息,并可视化数据的示例

Python爬取股票信息,并可视化数据的示例

前言 截止2019年年底我国股票投资者数量为15975.24万户, 如此多的股民热衷于炒股,首先抛开炒股技术不说, 那么多股票数据是不是非常难找, 找到之后是不是看着密密麻麻的数据是不是头都大了? 今天带大家爬取雪球平台的股票数据, 并且实现数据可视化 先看下效果图 基本环境配置 python 3.6 pycharm requests csv time 目标地址 https://xueqiu.com/hq 爬虫代码 请求网页 import requests url = 'https://xueqiu.com/service/v5/stock/screener/qu

Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储,很有参考借鉴意义

完整版精品Python网络爬虫教程 数据采集 信息提取课程 12-实例4-股票数据定向Scrapy爬虫(共23页).pptx

完整版精品Python网络爬虫教程 数据采集 信息提取课程 12-实例4-股票数据定向Scrapy爬虫(共23页).pptx

【课程简介】 本课程适合所有需要弥补python网络爬虫的同学,课件内容制作精细,由浅入深,适合入门或进行知识回顾。 【完整课程列表】 Python网络爬虫教程 数据采集 信息提取课程 01-Requests库入门(共59页).pptx Python网络爬虫教程 数据采集 信息提取课程 02-网络爬虫的盗亦有道(共19页).pptx Python网络爬虫教程 数据采集 信息提取课程 03-Requests库网络爬取实战(共29页).pptx Python网络爬虫教程 数据采集 信息提取课程 04-Beautiful Soup库入门(共53页).pptx Python网络爬虫教程 数据采集 信息提取课程 05-信息标记与提取方法(共49页).pptx Python网络爬虫教程 数据采集 信息提取课程 06-实例1-中国大学排名爬虫(共26页).pptx Python网络爬虫教程 数据采集 信息提取课程 07-Re(正则表达式)库入门(共51页).pptx Python网络爬虫教程 数据采集 信息提取课程 08-实例2-淘宝商品信息定向爬虫(共17页).pptx Python网络爬虫教程 数据采集 信息提取课程 09-实例3-股票数据定向爬虫(共23页).pptx Python网络爬虫教程 数据采集 信息提取课程 10-Scrapy爬虫框架(共34页).pptx Python网络爬虫教程 数据采集 信息提取课程 11-Scrapy爬虫基本使用(共32页).pptx Python网络爬虫教程 数据采集 信息提取课程 12-实例4-股票数据定向Scrapy爬虫(共23页).pptx

基于Python的股票数据爬虫系统GUI

基于Python的股票数据爬虫系统GUI

spider.py: 包括股票名的爬取和网页的爬取 stoke_h.py: 存入Excel文件 stoke_sql.py: 存入数据库 plot.py: 制图及存储图像 stoke_gui.py: GUI界面 运行: python stoke_gui.py

股票爬虫,股票爬虫及数据分析,Python

股票爬虫,股票爬虫及数据分析,Python

股票爬虫,python编写,方便学习,新手必备良药!

最新推荐最新推荐

recommend-type

获取东方财富股票的详细信息(python爬虫)

获取东方财富股票的详细信息(python爬虫)
recommend-type

python股票爬虫

用python requests实现的股票信息抓取,包括当日实时数据和历史数据
recommend-type

python爬虫爬取股票评论,调用百度AI进行语义分析, matlab数据处理,股票涨跌和评论的关系

python爬虫爬取股票评论, 调用百度AI进行语义分析, matlab数据处理, excel作图 股票涨跌和评论的关系
recommend-type

Python-TuShare是爬取中国股票历史数据的工具

TuShare是实现对股票/期货等金融数据从**数据采集**、**清洗加工** 到 **数据存储**过程的工具
recommend-type

Python股票数据爬虫+分析+可视化框架.zip

Python股票数据爬虫+分析+可视化框架.zip
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti