【python爬虫】用python爬取股票数据

本文记录了一种通过Python爬取东方财富网上交所和深交所股票名称及交易信息的过程。首先分析需求,然后选择合适的股票数据源,通过浏览器开发者工具找到动态数据接口。接下来介绍如何构造请求参数,获取数据并进行处理,最终将数据保存到本地文件。代码实现虽有不足,但能完成基本功能,适合初学者参考。

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

这几天把学习通的 python 爬虫相关课程给刷完了,想去动手也实践一下,重温一下很久之前学过的东西

然后发现实例2(爬淘宝那个)、实例3(爬股票那个),好像都有点问题。实例2是淘宝现在的反爬机制好像做的挺好,需要登录后才可以(当然也可能是我菜);实例3是百度的股票接口挂掉了。。
在这里插入图片描述
啊。。这。。
所以这篇文章以笔记的形式,记录一下另一种爬取股票数据的操作

需求分析

  • 目标:获取上交所和深交所所有股票的名称和交易信息
  • 输出:保存到文件中
  • 技术路线:requests & re & pandas & json

候选数据网站的选择

  • 选取原则:股票信息静态存在于 HTML 页面中,非 js 代码生成,没有 Robots 协议限制
  • 获取股票列表:
    • 东方财富网:http://79.push2.eastmoney.com/api/qt/clist/get(链接可能有所变化,不能直接打开,需要传递参数,请看下问分解

基本思路

  1. 打开 东方财富网行情中心
    在这里插入图片描述
    可以看到红色框框内有一堆股票数据,我们只需要找到这堆数据的返回接口即可(因为这个表格数据都是动态呈现的,如果使用 beautifulsoup4 直接做汤,表格内的数据都是 -),所以我们得去找数据接口
  2. F12 打开浏览器开发工具,找到 network 或者 网络
    在这里插入图片描述
    点击红色框框将当前网络请求记录清除,以便我们获取新的网络请求记录
  3. 点击网站表格下面的翻译,我们就会发现一条查询参数这么多的查询记录
    在这里插入图片描述
    点击预览我们就能看到与展示股票信息表格的对应信息的数据
    在这里插入图片描述
  4. 多翻几页表格,查看请求的参数变化,就能分析出请求参数有用的地方
    在这里插入图片描述
  5. 至此我们就可以根据标头查看我们所需的接口连接啦,每次打开这个连接可能前面的数字有所不同,但是都可有获取数据
    在这里插入图片描述
  6. 将全部请求的参数以字典的形式保存,然后在 requests.get() 的时候传递过去即可获得数据
  7. 使用 pandas 可以很方便的以 .csv 的格式导出数据文件到本地

当然,你不想看上面的内容,或者觉得我说的不是很清楚,也可以直接看下面的实现代码

实现代码

首先引入相关的第三方库与定义全局变量

import requests
import re
import json
import pandas

STOCK_LIST_URL = 'http://79.push2.eastmoney.com/api/qt/clist/get'

HEADERS = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                  'like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.77',
    'Cookie': '你自己的 Cookie 信息'
}

#	这个查询参数可以直接复制,
PARAMS = {
   
    'cb': 'jQuery112406209406051182_1590109022697',
    'pn': 1,  # 页码
    'pz': 200,  # 每页的大小
    'po': 1,
    'np': 1,
    'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
    'fltt': 2,
    'invt': 2,
    'fid': 'f3',
    'fs': 'm:0 t:6,m:0 t:13,m:0 t:80,m:1 t:2,m:1 t:23',
    'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
    '_': '1590109022826'
<think>好的,我现在需要帮助用户了解如何调用东方财富网的API接口,特别是那个eastmoney api qt clist get接口。首先,我得仔细看看用户提供的参考引用,里面有几个示例的URL,还有相关的Python代码。用户可能已经有了一些基本的环境准备,比如安装了pandas、requests这些库,可能需要用到。 首先,我应该先分析用户给出的示例URL,看看它们的结构。比如引用[1]和[2]中的URL,里面有很多参数,比如pn、pz、fid、fs等等。这些参数应该对应不同的数据请求,比如分页、每页数量、数据字段、市场类型之类的。我需要解释这些参数的作用,方便用户调整。 然后,用户提到的是调用这个接口的具体步骤。根据引用[4],用户可能需要使用Python的requests库发送HTTP请求,然后处理返回的数据。返回的数据看起来是JSONP格式的,也就是包裹在jQuery回调函数里的JSON数据,所以需要解析这部分内容。可能需要用字符串处理或者正则表达式提取JSON部分,再用demjson或者json库解析。 接下来,我需要整理出调用接口的一般步骤:构造请求URL、发送HTTP请求、处理响应数据、解析JSON、转换为DataFrame。然后,可能需要给出一个具体的代码示例,比如如何获取股票数据,并解释每个参数的意义,比如pn是页码,pz是每页数量,fields是需要的字段。 同时,用户可能遇到的问题包括参数错误、数据解析出错、接口权限或费用问题。比如引用[3]提到东方财富的API是付费的,普通用户可能需要通过网页获取数据,或者使用其他方法。所以需要提醒用户注意接口的使用限制,可能需要登录或者付费。 最后,生成相关的问题,比如如何解析回调函数、处理分页、筛选特定市场的数据,以及如何获取其他类型的数据比如可转债。这些问题可以帮助用户进一步深入使用API。 总结一下,回答的结构应该是先说明步骤,然后给出代码示例,解释参数,处理响应,最后注意事项和相关问题。确保用户能够按照步骤操作,并理解可能遇到的常见问题。</think>### 调用东方财富API接口步骤说明 #### 1. **构造请求URL** 接口基础URL为: ``` http://XX.push2.eastmoney.com/api/qt/clist/get ``` 其中`XX`为动态分配的服务器编号(如示例中的`58`或`21`),需根据实际情况调整[^1][^2]。 #### 2. **关键参数解析** - `pn`: 页码(从1开始) - `pz`: 每页数据量(最大值20000) - `fs`: 市场过滤规则,例如: - `m:0+t:6`表示深市A股 - `m:1+t:2`表示美股 - `fields`: 指定返回字段(如f2:最新价,f3:涨跌幅) - `fid`: 排序字段,`f3`表示按涨跌幅排序 - `po`: 排序方式,`1`为降序,`0`为升序 #### 3. **Python调用示例代码** ```python import requests import pandas as pd import demjson url = "http://58.push2.eastmoney.com/api/qt/clist/get" params = { "pn": 1, "pz": 20, "po": 1, "fid": "f3", "fs": "m:0+t:6", "fields": "f1,f2,f3,f12,f14", "_": 1677724452435 # 时间戳防缓存 } response = requests.get(url, params=params) json_str = response.text.split("(", 1)[1].rstrip(");") data = demjson.decode(json_str)["data"]["diff"] df = pd.DataFrame(data).T print(df) ``` #### 4. **数据处理要点** - 响应数据格式为`jQueryXXXX(...)`,需用字符串分割提取JSON - 使用`demjson`处理特殊字符更稳定(比标准json库容错性强)[^4] - 字段映射需参考接口文档,如`f12`为股票代码,`f14`为股票名称 #### 5. **注意事项** - 部分接口需要登录凭证(如cookie) - 高频访问可能触发反爬机制 - 付费接口需联系东方财富开通权限[^3] - 免费接口有频率限制(建议间隔3秒以上)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值