Python爬虫实战:股票分时数据抓取与存储 (1)

news2025/3/14 4:10:11

在金融数据分析中,股票分时数据是投资者和分析师的重要资源。它能够帮助我们了解股票在交易日内的价格波动情况,从而为交易决策提供依据。然而,获取这些数据往往需要借助专业的金融数据平台,其成本较高。幸运的是,通过Python爬虫技术,我们可以低成本地抓取股票分时数据,并将其存储以便后续分析。本文将详细介绍如何使用Python实现股票分时数据的抓取与存储,同时结合代理服务器确保爬虫的稳定性和安全性。

一、技术选型与环境搭建

在开始之前,我们需要明确技术选型和环境搭建。Python作为一门强大的编程语言,拥有丰富的库支持,非常适合用于爬虫开发。以下是主要的技术选型:

  1. Python版本:推荐使用Python 3.9及以上版本,以确保兼容性和性能。
  2. 爬虫框架:虽然可以使用Scrapy等成熟框架,但为了保持代码简洁,本文将使用requests库进行HTTP请求和BeautifulSoup库进行HTML解析。
  3. 数据存储:分时数据量较大,适合存储到数据库中。本文将使用SQLite作为轻量级数据库,便于本地存储和查询。
  4. 代理服务器:为了提高爬虫的稳定性和安全性,我们将使用代理服务器。代理服务器可以帮助我们隐藏真实IP地址,避免被目标网站封禁。
  5. 其他库:pandas用于数据处理,timedatetime用于时间处理。

二、代理服务器的配置

在爬虫开发中,代理服务器是不可或缺的工具。它可以隐藏爬虫的真实IP地址,避免因频繁访问被目标网站封禁。本文使用的代理服务器信息如下:

  • 代理主机:www.16yun.cn
  • 代理端口:5445
  • 代理用户名:16QMSOML
  • 代理密码:280651

为了在requests中使用代理服务器,我们需要配置代理参数。以下是代理配置的代码示例:

Python复制

import requests
from requests.auth import HTTPProxyAuth

proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

proxies = {
    "http": f"http://{proxyHost}:{proxyPort}",
    "https": f"http://{proxyHost}:{proxyPort}"
}
auth = HTTPProxyAuth(proxyUser, proxyPass)

在后续的HTTP请求中,我们将通过proxiesauth参数将请求发送到代理服务器。

三、股票分时数据的抓取

股票分时数据通常可以通过股票交易平台的API或网页源码获取。以某知名股票交易平台为例,其分时数据可以通过访问特定的URL获取。以下是抓取过程的详细步骤:

1. 分析目标网站

通过浏览器开发者工具(F12)查看分时数据的请求URL和返回格式。假设目标网站的分时数据请求URL为:

https://example.com/stock/tick?code={股票代码}&date={日期}

返回的数据格式为JSON,包含时间、价格、成交量等字段。

2. 编写爬虫代码

以下是使用requestsBeautifulSoup实现的分时数据爬取代码:

Python复制

import requests
import json
import pandas as pd
from datetime import datetime, timedelta
from requests.auth import HTTPProxyAuth

# 代理服务器配置
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

proxies = {
    "http": f"http://{proxyHost}:{proxyPort}",
    "https": f"http://{proxyHost}:{proxyPort}"
}
auth = HTTPProxyAuth(proxyUser, proxyPass)

def fetch_tick_data(stock_code, date):
    """
    抓取指定股票代码的分时数据
    :param stock_code: 股票代码,如"000001"
    :param date: 日期,格式为"YYYY-MM-DD"
    :return: 分时数据的DataFrame
    """
    url = f"https://example.com/stock/tick?code={stock_code}&date={date}"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }
    
    try:
 response        = requests.get(url, headers=headers, proxies=proxies, auth=auth)
        if response.status_code == 200:
            data = json.loads(response.text)
            # 将数据转换为DataFrame
            df = pd.DataFrame(data["ticks"])
            df["date"] = date
            df["time"] = pd.to_datetime(df["time"], format="%H:%M:%S")
            df.set_index("time", inplace=True)
            return df
        else:
            print(f"Failed to fetch data for {stock_code} on {date}. Status code: {response.status_code}")
            return None
    except Exception as e:
        print(f"Error occurred while fetching data for {stock_code} on {date}: {e}")
        return None

3. 数据抓取示例

假设我们要抓取股票代码为“000001”的分时数据,日期为“2024-10-10”,可以调用上述函数:

Python复制

if __name__ == "__main__":
    stock_code = "000001"
    date = "2024-10-10"
    tick_data = fetch_tick_data(stock_code, date)
    if tick_data is not None:
        print(tick_data.head())

运行代码后,tick_data将包含分时数据,如下所示:

price  volume  date
time                                           
2024-10-10 09:30:00  12.50   10000  2024-10-10
2024-10-10 09:31:00  12.52   15000  2024-10-10
2024-10-10 09:32:00  12.55   20000  2024-10-10
...

四、数据存储到SQLite数据库

抓取到的分时数据需要存储以便后续分析。SQLite是一个轻量级的数据库,适合本地存储。以下是将分时数据存储到SQLite数据库的代码实现:

1. 创建数据库和表

首先,我们需要创建一个SQLite数据库,并定义一个表来存储分时数据:

Python复制

import sqlite3

def create_database():
    """
    创建SQLite数据库和分时数据表
    """
    conn = sqlite3.connect("stock_tick_data.db")
    cursor = conn.cursor()
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS tick_data (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            stock_code TEXT,
            date TEXT,
            time TEXT,
            price REAL,
            volume INTEGER
        )
    """)
    conn.commit()
    conn.close()

2. 存储数据到数据库

将抓取到的分时数据存储到数据库中:

Python复制

def save_to_database(df, stock_code):
    """
    将分时数据存储到SQLite数据库
    :param df: 分时数据的DataFrame
    :param stock_code: 股票代码
    """
 conn    = sqlite3.connect("stock_tick_data.db")
    cursor = conn.cursor()
    
    for _, row in df.iterrows():
        cursor.execute("""
            INSERT INTO tick_data (stock_code, date, time, price, volume)
            VALUES (?, ?, ?, ?, ?)
        """, (stock_code, row["date"], row.name.strftime("%H:%M:%S"), row["price"], row["volume"]))
    
    conn.commit()
    conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2300289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将图片base64编码后,数据转成图片

将图片数据进行base64编码后,可以在浏览器上查看图片,只需在前端加上data:image/png;base64,即可 在线工具: Base64转图片 - 加菲工具

天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结

一、项目背景与目标 本文记录在天翼云昇腾910B服务器上部署DeepSeek 70B模型的全过程。该模型是基于LLaMA架构的知识蒸馏版本,模型大小约132GB。 1.1 硬件环境 - 服务器配置:天翼云910B服务器 - NPU:8昇腾910B (每卡64GB显存) - 系统内存&…

Jetson Agx Orin平台preferred_stride调试记录--1924x720图像异常

1.问题描述 硬件: AGX Orin 在Jetpack 5.0.1和Jetpack 5.0.2上测试验证 图像分辨率在1920x720和1024x1920下图像采集正常 但是当采集图像分辨率为1924x720视频时,图像输出异常 像素格式:yuv_uyvy16 gstreamer命令如下 gst-launch-1.0 v4l2src device=/dev/video0 ! …

DeepSeek冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题,上线不足一月,其全球累计下载量已达4000万,反超ChatGPT成为全球增长最快的AI应用,并且完全开源。那么究竟DeepSeek有什么魔力,能够让大家趋之若鹜,他又将怎样改变世界AI格…

CF 144A.Arrival of the General(Java实现)

题目分析 一个n个身高数据,问最高的到最前面,最矮的到最后面的最短交换次数 思路分析 首先,如果数据有重复项,例如示例二中,最矮的数据就是最后一个出现的数据位置,最高的数据就是最先出现的数据位置&…

set的使用(c++)

STL里面已经为我们实现了两种红黑树,一种是存储关键字的set,另一种是存储双关键字的map,今天主要来了解set,无论是set还是map后面都跟一个multi,它们区别是set 不能存相同元素, multiset 可以存相同的元素&…

IDEA单元测试插件 SquareTest 延长试用期权限

SquareTest是一款强大的IDEA单元测试生成插件工具,具体使用方法就不过多介绍了,这里主要介绍变更试用期,方便大家使用 配置信息 我的电脑安装前提配置条件 IntelliJ IDEA 2023.2windows 系统 软件安装 IntelliJ IDEA 直接安装插件Squar…

25/2/17 <嵌入式笔记> 桌宠代码解析

这个寒假跟着做了一个开源的桌宠,我们来解析下代码,加深理解。 代码中有开源作者的名字。可以去B站搜着跟着做。 首先看下main代码 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…

油田安全系统:守护能源生命线的坚固壁垒

油田安全系统:不可或缺的能源护盾 在能源领域,油田作为国家重要的能源供应基地,其安全生产的重要性不言而喻。油田安全系统犹如一道坚固的护盾,全方位守护着人员生命、企业财产以及生态环境,是油田平稳运行与可持续发展…

【故障处理】- 执行命令crsctl query crs xxx一直hang

【故障处理】- 执行命令crsctl query crs xxx一直hang 一、概述二、故障处理三、解决方法 一、概述 Oracle RAC环境中,遇到执行crsctl query crs xxx等相关命令不返回任何结果,一直hang在那里。系统下执行命令ps -ef |grep crsctl query crs softwarever…

JMeter工具介绍、元件和组件的介绍

Jmeter功能概要 JDK常用文件目录介绍 Bin目录:存放可执行文件和配置文件 Docs目录:是Jmeter的API文档,用于开发扩展组件 printable_docs目录:用户帮助手册 lib目录:存放JMeter依赖的jar包和用户扩展所依赖的Jar包…

DeepSeek 引领AI 大模型时代,服务器产业如何破局进化?

2025 年 1 月,DeepSeek - R1 以逼近 OpenAI o1 的性能表现,在业界引起轰动。其采用的混合专家架构(MoE)与 FP8 低精度训练技术,将单次训练成本大幅压缩至 557 万美元,比行业平均水平降低 80%。这一成果不仅…

安卓burp抓包,bypass ssl pinning

好久好久没有发东西了。主要是懒。。。 这几天在搞apk渗透,遇到了burp无法抓包问题,觉得可以写下来。 问题描述 1. 一台安卓手机,装了面具,可以拿到root 2. 电脑上有burp,设置代理 3.手机和电脑连同一个网段&…

服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程

0. 部署前的准备 首先我们需要足够算力的机器,这里我在vultr中租了有一张A16显卡一共16GB显存的服务器作为演示。部署的模型参数为14b的。如果需要部署满血版本671b的,需要更大的算力支持,这里由于是个人资金有限,就演示14b的部署…

rust学习笔记2-rust的包管理工具Cargo使用

首先先解决一个配置文件,目前rust版本升级后,config已经改成 config.toml 内容也做了如下调整 [source.crates-io] replace-with tuna[source.tuna] registry "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" 1.Rust 编程…

DeepSeek + Vue实战开发

利用DeepSeek V3模型、siliconflow大模型一站式云服务平台以及vue3.0实现一个在线人工智能客服对话系统。 因为deepseek官网的api密钥使用起来比较缓慢,所以可以使用第三方的,具体操作请自行查阅资料。 siliconflow官网 SiliconFlow, Accelerate AGI …

【数据结构】(8) 二叉树

一、树形结构 1、什么是树形结构 根节点没有前驱,其它节点只有一个前驱(双亲/父结点)。所有节点可以有 0 ~ 多个后继,即分支(孩子结点)。每个结点作为子树的根节点,这些子树互不相交。 2、关于…

Web 后端 请求与响应

一 请求响应 1. 请求(Request) 客户端向服务器发送的HTTP请求,通常包含以下内容: 请求行:HTTP方法(GET/POST等)、请求的URL、协议版本。 请求头(Headers):…

CEF132 编译指南 Linux 篇 - CEF 编译实战:构建 CEF(六)

1. 引言 经过前几篇的精心准备,我们已经完成了所有必要的环境配置和源码下载。现在,我们将进入激动人心的 CEF 编译阶段。本篇将详细指导你在 Linux 系统上编译 CEF 6834 分支(对应 Chromium 132 版本),包括创建项目文…