python 按表里的股票编码下载

本文介绍了一种使用Python从市场获取股票历史数据的方法,并将其保存为CSV文件的过程。利用tushare库抓取数据,并通过Oracle数据库连接进行股票代码的检索。此脚本按周('W')周期获取指定股票列表中各股票的历史数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/python
import tushare as ts
import os
import re
from sqlalchemy import create_engine
import cx_Oracle


p_ktype='W'


sql="select stockcode from stock_temp order by stockcode "
engine = create_engine('oracle+cx_oracle://stock:stock@192.168.1.10/orcl')
cnx = engine.connect()


index = 0
for stock in cnx.execute(sql):
    stocknum = stock[index]
    if stocknum != "":
        df = ts.get_hist_data(code=stocknum[2:8])
        df.index.names=['op_time']
        df['STOCKID']= stocknum
        df['ktype']= p_ktype
        df.to_csv('/root/stock_py/data/data_stock/'+stocknum+'.txt')
#        df.to_sql('iq_stock',cnx,if_exists='append',chunksize=500) 
index +=1
cnx.close()
### 抓取东方财富网所有股票数据的方法 要实现对东方财富网上所有股票数据的抓取,可以通过以下几个方面完成: #### 数据源地址 目标网址为东方财富网的股票列表页面 `http://quote.eastmoney.com/stocklist.html`[^3]。该页面包含了所有的股票名称及其对应的代码。 #### 使用的技术栈 为了高效地抓取和存储数据,可以采用以下工具和技术: - **Requests** 或 **Urllib**: 用于发送 HTTP 请求获取网页内容。 - **BeautifulSoup** (来自 `bs4`) : 解析 HTML 页面结构提取所需数据。 - **Pandas**: 处理和清洗数据以便后续保存至 CSV 文件或 MySQL 数据库。 - **MySQL Connector** 或其他数据库驱动程序: 将数据写入 MySQL 数据库。 以下是具体实现方法的一个完整示例代码片段: ```python import requests from bs4 import BeautifulSoup import pandas as pd import mysql.connector # 定义函数获取股票列表页的内容 def fetch_stock_list(): url = 'http://quote.eastmoney.com/stocklist.html' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') stock_data = [] stocks = soup.find_all('a', attrs={'target': '_blank'}) for stock in stocks: name_code = stock.text.strip() if '(' in name_code and ')' in name_code: code = name_code.split('(')[-1].split(')')[0] name = name_code.split('(')[0] stock_data.append({'name': name, 'code': code}) return stock_data # 获取股票数据并转换成 DataFrame 格式 stocks_df = pd.DataFrame(fetch_stock_list()) # 存储到本地 CSV 文件 stocks_df.to_csv('eastmoney_stocks.csv', index=False) # 连接 MySQL 并创建表 db_config = { 'host': 'localhost', 'user': 'root', 'password': 'your_password', 'database': 'stock_db' } connection = mysql.connector.connect(**db_config) cursor = connection.cursor() create_table_query = """ CREATE TABLE IF NOT EXISTS stocks ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), code VARCHAR(20) ); """ cursor.execute(create_table_query) # 插入数据到 MySQL 表中 for _, row in stocks_df.iterrows(): insert_query = f"INSERT INTO stocks (name, code) VALUES ('{row['name']}', '{row['code']}');" cursor.execute(insert_query) connection.commit() cursor.close() connection.close() ``` 上述代码完成了从东方财富网抓取所有股票数据的任务,并分别将这些数据保存到了本地 CSV 文件以及 MySQL 数据库中的 `stocks` 表里[^1]^。 #### 关键点说明 1. **反爬机制规避** - 添加自定义 User-Agent 避免被服务器识别为机器人访问而拒绝服务。 2. **HTML 结构解析** - 利用 BeautifulSoup 提取出 `<a>` 标签内的文字信息,其中包含股票名与编号组合字符串,再通过简单的字符串分割得到单独的名字和编码. 3. **异常处理** - 实际开发时应加入更多的错误捕获逻辑以应对网络波动或者目标站点结构调整带来的影响。 4. **性能优化建议** - 如果涉及大量并发请求,则考虑引入异步框架如 aiohttp 来提高效率;另外注意遵守网站 robots.txt 协议设定合理的延迟时间间隔以免给对方造成过大负担[^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值