当前位置: 首页 > news >正文

【爬虫】爬取A股数据写入数据库(一)

在这里插入图片描述

1. 对东方财富官网的分析

步骤:

  1. 通过刷新网页,点击等操作,我们发现https://datacenter-web.eastmoney.com/api/data/v1/get?请求后面带着一些参数即可以获取到相应数据。
  2. 我们使用python来模拟这个请求即可。
    我们以如下选择的页面为切入点,以此获取当前所有A股的一些基本数据。
    [图片]

通过F12调出浏览器调试框,对该网站的数据拉取协议为参考,然后通过python模拟此类请求,进行获取数据,如下图所示:
[图片]

[图片]

[图片]

主要代码如下:

import pandas as pd
from typing import List
import requests, jsonclass CustomedSession(requests.Session):def request(self, *args, **kwargs):kwargs.setdefault('timeout', 60)return super(CustomedSession, self).request(*args, **kwargs)MAX_CONNECTIONS = 50
session = CustomedSession()
adapter = requests.adapters.HTTPAdapter(pool_connections = MAX_CONNECTIONS,pool_maxsize = MAX_CONNECTIONS,max_retries = 5)
session.mount('http://', adapter)
session.mount('https://', adapter)# 请求地址
QEURY_URL = 'http://datacenter-web.eastmoney.com/api/data/v1/get'# HTTP 请求头
EASTMONEY_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',# 'Referer': 'http://quote.eastmoney.com/center/gridlist.html',
}# 请求返回值过滤
RESULT_FIELDS = {'SECURITY_CODE': '股票代码','SECURITY_NAME_ABBR': '股票名称','END_DATE': '本次股东户数统计截止日','PRE_END_DATE': '上次股东户数统计截止日','INTERVAL_CHRATE': '区间涨跌幅','AVG_MARKET_CAP': '户均持股市值','AVG_HOLD_NUM': '户均持股数量','TOTAL_MARKET_CAP': '总市值','TOTAL_A_SHARES': '总股本','HOLD_NOTICE_DATE': '公告日期','HOLDER_NUM': '本次股东户数','PRE_HOLDER_NUM': '上次股东户数','HOLDER_NUM_CHANGE': '股东户数增减','HOLDER_NUM_RATIO': '股东户数较上期变化百分比',  'f2': '最新价','f3': '涨跌幅百分比',
}# 请求页码
QEURY_PAGE = 1
# 请求参数
QUERY_PARAM = [('sortColumns', 'HOLD_NOTICE_DATE,SECURITY_CODE'),('sortTypes', '-1,-1'),('pageSize', 500),('pageNumber', QEURY_PAGE),('columns', 'SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE',),('quoteColumns', 'f2,f3'),('source', 'WEB'),('client', 'WEB'),('reportName', 'RPT_HOLDERNUMLATEST'),
]"""
获取沪深A股市场最新公开的股东数目变化情况: 当作获取所有股票
ParametersNoneReturnsDataFrame
"""
def get_latest_holder_number() -> pd.DataFrame:global QEURY_PAGEQEURY_PAGE = 1PAGE_COUNT = 100dfs: List[pd.DataFrame] = []while 1:if QEURY_PAGE > PAGE_COUNT:breakparams = tuple(QUERY_PARAM)response = session.get(QEURY_URL, headers=EASTMONEY_REQUEST_HEADERS, params=params)resultJson = response.json()PAGE_COUNT = resultJson.get('result').get('pages')if PAGE_COUNT is None:breakdata = resultJson.get('result').get('data')if data is None:breakdf = pd.DataFrame(data)df = df.rename(columns=RESULT_FIELDS)[RESULT_FIELDS.values()]dfs.append(df)QEURY_PAGE += 1if len(dfs) == 0:df = pd.DataFrame(columns=RESULT_FIELDS.values())return dfdf = pd.concat(dfs, ignore_index=True)return dfif __name__ == "__main__":data = get_latest_holder_number()print(data)

调用如上函数即可:
在这里插入图片描述
更多内容:【爬虫】爬取A股数据系列

http://www.lryc.cn/news/341960.html

相关文章:

  • 1-38 流资源类结构
  • nginx的前世今生(二)
  • 浏览器跨域详解
  • 华为5700配置
  • 使用Axios从前端上传文件并且下载后端返回的文件
  • open 函数到底做了什么
  • ue引擎游戏开发笔记(32)——为游戏添加新武器装备
  • 【个人博客搭建】(17)使用FluentValidation 参数校验
  • 数据结构===散列表
  • 10G MAC层设计系列-(2)MAC RX模块
  • 解码Starknet Verifier:深入逆向工程之旅
  • 【C++语言】类和对象--默认成员函数 (中)
  • 前端递归常见应用
  • AI工具如何改变我们的工作与生活
  • 深入了解C/C++的内存区域划分
  • C++构造函数和析构函数的调用顺序
  • 智能家居1 -- 实现语音模块
  • Leetcode 3139. Minimum Cost to Equalize Array
  • 【element-ui】el-table横向滚动后,通过is-scrolling-left获取滚动高度失效的问题
  • JAVA中的日期
  • 一起了解开源自定义表单的优势表现
  • 体育老师工资高吗,奖金有吗
  • Linux驱动开发——(十一)INPUT子系统
  • 大数据毕业设计Python+Django旅游景点评论数据采集分析可视化系统 NLP情感分析 LDA主题分析 bayes分类 旅游爬虫 旅游景点评论爬虫 机器学习 深度学习 人工智能 计算机毕业设计
  • FSNotes for Mac v6.7.1中文激活版:强大的笔记管理工具
  • 课程34:Windows Docker部署.Net Core项目
  • 分布式与一致性协议之ZAB协议(四)
  • 在M1芯片安装鸿蒙闪退解决方法
  • Linux基础-socket详解、TCP/UDP
  • 【菜单下拉效果】基于jquery实现二级菜单下拉效果(附完整源码下载)